php图像处理-使用GD、ImageGick和PHP框架的图像处理技术

21CTO社区介绍:本文介绍了缩略图的处理。 图像裁剪是网站中的常见过程。 用户上传图片后,产品UI需要根据不同设备显示不同规格的缩略图。

概述

大家好,请问缩略图是什么? 缩略图只是大图的缩小版(废话),并不是那么可恶的马赛克。 使用它,您的网站应用程序可以实现以下目标:

1、下载速度较快,响应率高。

2.节省用户流量。 为了清晰起见,网站可以使用稍大的图像。 应用程序中的大图像实际上是吞噬用户流量和电池的老虎。

3、对于一些开发不太完善的APP,图片占用显存过多,容易崩溃。 等待使用。

那么,缩略图用于什么场景呢? 如下:

1、图片只适合固定高度和厚度的容器,且不留空白(为了兼容允许缩小尺寸)

2.以合适的帧率显示(没有CSS或HTML来限制长宽高php图像处理,或者放大图像)

3、图像不会变形、扭曲,保持图片显示比例。

调整图像大小和裁剪图像的工具和技术

在LNMP环境下,可以使用GD2来处理图片。 GD2是PHP中的外部库,不需要单独安装,只需在php.ini中打开其配置即可。

另外,PHP还可以使用imagegick等外部工具来处理图像。 imagegick是一个强大的图像处理工具,使用它,我们甚至可以在web下开发photoshop。

本文介绍Codeigniter框架,它提供了一个比较完整的图像处理库。

图像缩略图配置

下面是一个完整的上传场景,它将从一张图片生成一个宽高为50*50的缩略图。 在此示例中,它是使用 gd2 库进行处理的。 请看下面的代码:

$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();
}
}

图像处理示例

接下来我们使用 Codeigniter 来处理上传并生成缩略图。 完整的方式如下:

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);
}
}

上面我们使用GD2对图片进行处理和缩放,并生成缩略图。 下面使用imageGick来处理图像。

使用 ImageGick

使用ImageGick,同样无需任何框架。 我们可以使用下面的原生PHP代码,如下:

<?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 ); //图片保存之路径
...
?>

要在 CodeIgniter 中使用 imagegick,请参阅以下代码片段:

<?php
$this->load->library('image_lib');
$config['image_library']= 'ImageMagick';
$config['library_path'] = $path;

下面省略代码,与gd2的配置基本相同,可以参考上下文。 ImageGick具有强大的功能。 有兴趣的朋友可以详细了解一下。 后续我们还会继续介绍。

概括

框架的目的是为了方便、轻松地解决问题。 本文主要介绍CodeIgniter。 如果您使用 Laravel、YII、ThinkPHP 等框架,同样适用。

本文由社区朋友特别发表。 欢迎后台提出建议。 特别欢迎技术专家为 21CTO 社区做出贡献并联系。

做正确的人,做正确的事,找到正确的人,做好事php图像处理,每一天都是圣诞节。 祝社会各界人士节日快乐! ~