社区导读:本文介绍的是缩略图的处理。图片剪切是网站中常见的处理。用户上传图片后,需要根据不同的设备,产品UI显示不同尺寸的缩略图。

概述

各位好,缩略图是什么?缩略图就是大图缩小的图(废话),也不是那万恶的马塞克。用了它可以使你的网站应用达到以下目标:

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

2、节省用户流量。Web网站为了清晰度可以使用稍大的图片,APP中大图实际上是吃掉用户流量和电池的老虎

3、对于一些开发的不够好的APP,图片占用内存过大,容易crash。等等好处。

那么,缩略图使用在哪些场景?如下:

1、图片正好适合固定高度和宽度的容器中,不要留下空白(允许为兼容增大尺寸)

2、以合适的分辨率显示(不用CSS或HTML限制长宽高,或者放大图像)

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")."\\images\\uploaded\\".$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代码,如下:

$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,请看如下之代码片断:

$this->load->library('image_lib');

$config['image_library']= 'ImageMagick';

$config['library_path']    = $path;

代码以下省略,与gd2的配置基本相同,各位可参考上下文。imageGick功能强大,感兴趣的同学可以再继续了解,后续我们也会持续介绍 。

小结

框架的好处是能够很方便,很容易的解决问题。本文主要介绍了CodeIgniter,如果使用Laravel或YII、ThinkPHP等框架等亦同样道理。

本文应社区同学特约刊登,欢迎后台发送建议,特别欢迎各位技术专家投稿和联系21CTO社区。

做对人,做对事,找对人,做好事,每天都是圣诞节。祝社区各位小伙伴节日快乐!~

php图片处理案例,使用GD、ImageGick与PHP框架的图片处理技术相关推荐

  1. php下载框架里的图片,使用GD、ImageGick与PHP框架的图片处理技术

    原标题:使用GD.ImageGick与PHP框架的图片处理技术 社区导读:本文介绍的是缩略图的处理.图片剪切是网站中常见的处理.用户上传图片后,需要根据不同的设备,产品UI显示不同尺寸的缩略图. 概述 ...

  2. 【PaddleOCR】Flask+SpringCloud+Nacos+PaddleOCR的图片识别案例,使用Feign调用

    [PaddleOCR]Flask+SpringCloud+Nacos 的图片识别案例 文章目录 [PaddleOCR]Flask+SpringCloud+Nacos 的图片识别案例 前言 一.Padd ...

  3. tf.nn.conv2d理解(带通道的卷积图片输出案例)

    三篇参考: 1.https://blog.csdn.net/goodshot/article/details/79655915 TF-卷积函数 tf.nn.conv2d 介绍 2.https://bl ...

  4. Spark Streaming 图片处理案例介绍

    Spark Streaming 图片处理案例介绍 本文首先介绍了流式处理框架的设计原理.Spark Streaming 的工作原理,然后通过一个基于 Spark Streaming 编写的读取.分析. ...

  5. 强大的jQuery焦点图插件Owl Carousel + 响应式图片(案例解析)

    GitHub地址:https://github.com/OwlCarousel2/OwlCarousel2 在各式各样的网站中,都能看到焦点图插件的身影. 一个好的焦点图插件必须满足以下特点:1. 支 ...

  6. python深入之装饰器--通过选择发说说和发图片的案例理解装饰器

    装饰器 即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰器.装饰器的主要依据是闭包 这里用一个案例来说明装饰器的作 ...

  7. qlaber 中放置图片_我准备了60个案例,教你彻底搞定PPT图片排版!

    大家好,我是秋小叶!这里是秋叶 PPT 的「Office 干货」栏目. 有图片的 PPT 页面该如何排版?这大概是很多小伙伴都头疼的一大难题~今天给你分享一篇三顿的文章,用 60 个案例教你彻底搞定 ...

  8. 爬取推糖网图片小案例

    前言: 好久没有更新博文了,因为工作的关系,一直没有更新博文,今天有空,就给大家带来一个爬图片的小案例.今天的目标网站就是堆糖网,关于爬取这个网站图片的案例,肯定大家都看到很多,基本都是通过搜索图片的 ...

  9. 字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例

    目录 IO流概述和分类 字节流写入数据(OutputStream) FileOutputStream 字节流写数据的3种方式 字节流写入数据的两个小问题 字节流写数据如何换行 字节流如何实现追加写入 ...

最新文章

  1. set/multiset/unordered_set和map/multimap/unordered_map基础汇总
  2. 无人机官方网站_用上5G和无人机,你家高楼也可以做 体检
  3. django-一对多关系
  4. mysql数据库写分页函数_mysql数据库写分页函数
  5. 计算机网络实验:VLAN Practice Lab Setup in Packet Tracer and Configure DHCP Server for multiple VLAN
  6. 【Flink】Flink自定义UDF以及为函数启用别名
  7. 代码整洁之道的一些总结
  8. 如何让研发薪酬更具有吸引力?华为、阿里、腾讯的方法值得借鉴
  9. win7如何安装IIS,三种方法任你选(图文教程)
  10. html圆形头像的制作
  11. 杨辉三角(C语言简单版)
  12. java socket 循环读取_java socket tcp(服务器循环检测)
  13. 富兰克林的风筝:ReID产业化拉开的计算视觉新序幕
  14. 健康开怀一辈子(转)
  15. 自动点击按钮html,如何自动点击网页按钮
  16. 开源Star10K+数据库工具Beekeeper上手体验,免费够酷值得拥有
  17. hibernate 报错大全
  18. 机器人改变生活利弊英语作文_最新雅思写作语料库:机器人利弊
  19. 加勒比考试委员会将向24,000名候选人发放区块链证书
  20. 从事Linux运维的自我介绍,运维面试自我介绍

热门文章

  1. 高通平台如何使用QPST抓DUMP
  2. 2021年南京大学软件工程电子信息专业考研指南
  3. 王卫,零售风口练习生
  4. slxrom+v.21+原生android+4.2,小米MIX2S 魔趣OS 安卓9 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
  5. Java当中的IO流-时间api(下)-上
  6. ISLR读书笔记(1)统计学习简介
  7. -XX:+TraceClassLoading和-XX:+TraceClassUnloading
  8. Jlink在ADS下的配置说明及常见问题解决办法 (转载)
  9. 计算机系学不学工程力学,工程力学专业属于什么门类
  10. 包青天人声接电话搞笑版铃声 包青天人声接电话搞笑版手机铃声...