21CTO社区导读:本文介绍的是缩略图的处理。图片剪切是网站中常见的处理。用户上传图片后,需要根据不同的设备,产品UI显示不同尺寸的缩略图。
概述
缩放&裁剪图片的工具&技术
图片缩略配置
$config['image_library']= 'gd2';
$config['source_image']= './uploads/'.$imgName.".jpg";
$config['new_image']= './uploads/'.$imgName."_new.jpeg";
$config['create_thumb']= TRUE;
$config['maintain_ratio']= TRUE;
$config['width'] =50;
$config['height'] =50;
接下来需要引用image_libs库。代码如下:
$this->load->library('image_lib',$config);
接下来调用resize方法来缩放图片。如下:
// resize image
$this->image_lib->resize();
// handle if thereis any problem
if ( !$this->image_lib->resize()){
echo$this->image_lib->display_errors();
}
resize()方法会按我们指定的文件夹的图片进行缩放。可以使用$this->image_lib->display_errors()来跟踪错误,发现问题后再进行处理。如下代码:
function image_resize($img_name) {
$img_path = realpath("img")."imagesuploaded".$img_name.".jpeg";
// 配置
$config['image_library'] = 'gd2';
$config['source_image'] ='./img/images/uploaded/'.$img_name.".jpeg";
$config['new_image'] ='./img/images/uploaded/'.$img_name."_new.jpeg";
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['quality'] = "100%"; //图片精度
$config['width'] = 50; //图片宽度
$config['height'] = 50; //图片高度
$this->load->library('image_lib',$config);
// 图片缩放
$this->image_lib->resize();
// 处理错误信息
if ( !$this->image_lib->resize()){
echo$this->image_lib->display_errors();
}
}
图片处理实例
function do_upload() {
$upload_config = array(
'upload_path' => realpath('assets/'), //图片路径
'allowed_types' =>'gif|jpg|png', //图片格式
'max_size' => '30000', //图片尺寸
);
$this->upload->initialize($upload_config );
//处理上传的文件数组
foreach($_FILES['userfile'] as$key=>$val) {
$i = 1;
foreach($val as $v) {
$field_name ="file_".$i;
$_FILES[$field_name][$key] =$v;
$i++;
}
}
unset($_FILES['userfile']);
//两个数组,分别保存错误和上传成功的信息
$error = array();
$success = array();
// 处理上传
foreach($_FILES as $field_name =>$file){
if ( !$this->upload->do_upload($field_name)) {
//如果上传失败
$error['upload'] =$this->upload->display_errors();
}else{
//取得上传成功的数据,可此数组放在数据库内
$upload_data =$this->upload->data();
// 图片缩放配置
$resize_config = array(
// 图片源路径,如 "/var/uploads /image.jpeg"
'source_image' => $upload_data['full_path'],
// 缩略图路径 "/var/uploads/thumb/"+ "thumb_" + "image.jpg
// 也可以使用'create_thumbs' => true 选项
'new_image' =>$upload_data['file_path'].'thumb_'.$upload_data['file_name'],
'width' => 200,
'height' => 200
);
$this->image_lib->initialize($resize_config);
if ( ! $this->image_lib->resize()){
// 处理错误
$error['resize'] =$this->image_lib->display_errors();
} else {
//把上传后的数据放在数组中
$success = $upload_data;
}
}
}
//检查错误
if(count($error > 0)) {
$data['error'] = $error;
} else{
$data['success'] = $upload_data;
}
$this->load->view('upload',$data);
}
}
使用ImageGick
<?php
$thumbnail= new Imagick($pix);
$wid = 128;
$thumbnail->thumbnailImage( $wid, 0 );
$thumbnail->enhanceImage();
$thumbnail->sharpenimage(1,1,Imagick::CHANNEL_ALL); //$radius,$sigma, $channel);
//锐化图片,$radius为锐化角度,半径,越小越薄$sigma 为锐化标准差,越大墨越深 $channel 模糊处理,使用的图片频道
$thumb_url = $thumbnail->writeImage('thumbs/'.$thb ); //图片保存之路径
...
?>
<?php
$this->load->library('image_lib');
$config['image_library']= 'ImageMagick';
$config['library_path'] = $path;
小结
本文为 @ 21CTO 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。