Ash*_*del 0 php image-manipulation codeigniter
我正在尝试上传图像并在同一功能中以不同的尺寸重新调整它们的大小.但是会发生的是,只有一个重新调整大小而其他重组大小不起作用.我的代码是:
function do_upload()
{
$this_user = $this->auth->info;if(!is_dir('./uploads/'.$this_user->username)){
mkdir('./uploads/'.$this_user->username);
mkdir('./uploads/'.$this_user->username.'/photos');
mkdir('./uploads/'.$this_user->username.'/photos/master');
mkdir('./uploads/'.$this_user->username.'/photos/small');
mkdir('./uploads/'.$this_user->username.'/photos/medium');
mkdir('./uploads/'.$this_user->username.'/photos/large');
mkdir('./uploads/'.$this_user->username.'/photos/xlarge');
}
$config['upload_path'] = './uploads/'.$this_user->username.'/photos/master/';
$config['allowed_types'] = 'gif|jpg';
$title = $this->input->post('title');
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
echo '<div id="status">error</div>';
echo '<div id="message">'. $this->upload->display_errors() .'</div>';
}
else
{
$data = array('upload_data' => $this->upload->data());
//resizing begins
$image_width = $data['upload_data']['image_width'];
$image_height = $data['upload_data']['image_height'];
$full_path = $data['upload_data']['full_path'];
//checking for width
if($image_width>5000){
$config['image_library'] = 'gd2';
$config['source_image'] = $full_path;
//$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 5000;
//$config['height'] = 50;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/xlarge';
$this->load->library('image_lib', $config);
$this->image_lib->resize();
}
if($image_width>=4500){
$config['image_library'] = 'gd2';
$config['source_image'] = $full_path;
//$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 4500;
//$config['height'] = 50;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/large';
$this->load->library('image_lib', $config);
$this->image_lib->resize();
}
if($image_width>=2000){
$config['image_library'] = 'gd2';
$config['source_image'] = $full_path;
//$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 2000;
//$config['height'] = 50;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/medium';
$this->load->library('image_lib', $config);
$this->image_lib->resize();
}
if($image_width>=800){
$config['image_library'] = 'gd2';
$config['source_image'] = $full_path;
//$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 800;
//$config['height'] = 50;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/small';
$this->load->library('image_lib', $config);
$this->image_lib->resize();
}
//resizing ends
echo '<div id="status">success</div>';
//then output your message (optional)
echo '<div id="message">'. $data['upload_data']['file_name'].$this->input->post('type').' Successfully uploaded.</div>';
//pass the data to js
echo '<div id="upload_data">'. json_encode($data) . '</div>';
}
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
您需要确保$this->image_lib->clear();在重置图像操作类的初始化时调用.请参阅:http://codeigniter.com/user_guide/libraries/image_lib.html
这实际上对我有用.我正在做的是多次加载库.我应该已经加载了一次库并初始化每个重新调整大小的配置.这是适合我的代码.
function do_upload()
{
$this_user = $this->auth->info;
if(!is_dir('./uploads/'.$this_user->username)){
mkdir('./uploads/'.$this_user->username);
mkdir('./uploads/'.$this_user->username.'/photos');
mkdir('./uploads/'.$this_user->username.'/photos/master');
mkdir('./uploads/'.$this_user->username.'/photos/small');
mkdir('./uploads/'.$this_user->username.'/photos/medium');
mkdir('./uploads/'.$this_user->username.'/photos/large');
mkdir('./uploads/'.$this_user->username.'/photos/xlarge');
}
$config['upload_path'] = './uploads/'.$this_user->username.'/photos/master/';
$config['allowed_types'] = 'gif|jpg';
$title = $this->input->post('title');
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
echo '<div id="status">error</div>';
echo '<div id="message">'. $this->upload->display_errors() .'</div>';
}
else
{
$data = array('upload_data' => $this->upload->data());
//resizing begins
$image_width = $data['upload_data']['image_width'];
$image_height = $data['upload_data']['image_height'];
$full_path = $data['upload_data']['full_path'];
//checking for width
$this->load->library('image_lib');
if($image_width>5000){
$config['source_image'] = $full_path;
$config['maintain_ratio'] = TRUE;
$config['width'] = 5000;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/xlarge';
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
$aa = 'xlarge ';
}
if($image_width>=4500){
$config['source_image'] = $full_path;
$config['maintain_ratio'] = TRUE;
$config['width'] = 4500;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/large';
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
$aa .= 'large';
}
if($image_width>=2000){
$config['source_image'] = $full_path;
$config['maintain_ratio'] = TRUE;
$config['width'] = 2000;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/medium';
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
$aa .= 'medium';
}
if($image_width>=800){
$config['source_image'] = $full_path;
$config['maintain_ratio'] = TRUE;
$config['width'] = 800;
$config['new_image'] = './uploads/'.$this_user->username.'/photos/small';
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
$aa .= 'small';
}
//resizing ends
echo '<div id="status">success</div>';
//then output your message (optional)
echo '<div id="message">'. $data['upload_data']['file_name'].$aa.' Successfully uploaded.</div>';
//pass the data to js
echo '<div id="upload_data">'. json_encode($data) . '</div>';
}
}
Run Code Online (Sandbox Code Playgroud)