原标题:使用GD、ImageGick与PHP框架的图片处理技术

社区导读:本文介绍的是缩略图的处理。图片剪切是网站中常见的处理。用户上传图片后,需要根据不同的设备,产品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")."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代码,如下:

$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. 用python批量下载网络图片_python 批量下载网页里的图片

    import requests import sys,re #设置提取图片url 的正则表达式 imgre = re.compile(r" #存放找到的 图片url的列表 all_img_u ...

  2. 如何在机器学习的框架里实现隐私保护?

    编者按:数据时代,人们从技术中获取便利的同时,也面临着隐私泄露的风险.微软倡导负责任的人工智能,因此机器学习中的隐私保护问题至关重要.本文介绍了目前机器学习中隐私保护领域的最新研究进展,讨论了机密计算 ...

  3. 微软研究院:如何在机器学习的框架里实现隐私保护?

    编者按:数据时代,人们从技术中获取便利的同时,也面临着隐私泄露的风险.微软倡导负责任的人工智能,因此机器学习中的隐私保护问题至关重要.本文介绍了目前机器学习中隐私保护领域的最新研究进展,讨论了机密计算 ...

  4. img绝对路径图片显示_使用python爬虫去风景图片网站批量下载图片

    使用python爬虫(requests,BeautifulSoup)去风景图片网站批量下载图片 1.写代码背景: 今天闲来无事,想弄点图片放到电脑,方便以后使用,故去百度查找一些风景图片网站,发现图片 ...

  5. PytorchCNN图片识别和分类模型训练框架

    PytorchCNN图片识别和分类模型训练框架 文章目录 PytorchCNN图片识别和分类模型训练框架 前言 一.图片数据集预处理 二.模型训练 1.transforms.Compose准备 2.通 ...

  6. 8.10Dubbo框架里的微服务组件

    title date comments categories tags permalink Dubbo框架里的微服务组件 2020/4/28 true 微服务 微服务 8.10 今天以开源微服务框架 ...

  7. # iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传至服务器

    iOS 相册图片多选以及类似微信获取相册图片并使用AFN框架上传至服务器 做APP基本上都是需要从系统的相册当中获取一张或多张图片.那怎么做呢?下面我就带你来实现这个内容,第一次写. 我只是记录一下. ...

  8. TF之GD:基于tensorflow框架搭建GD算法利用Fashion-MNIST数据集实现多分类预测(92%)

    TF之GD:基于tensorflow框架搭建GD算法利用Fashion-MNIST数据集实现多分类预测(92%) 目录 输出结果 实现代码 输出结果 Successfully downloaded t ...

  9. SAP CRM One Order框架里旧式的索引表设计原理

    本文介绍SAP CRM One Order框架里旧式的索引表设计原理. Created by Wang, Jerry on May 17, 2017 要获取更多Jerry的原创文章,请关注公众号&qu ...

最新文章

  1. 5008.工程师职场能力自测评估
  2. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...
  3. Facebook开源动画库 POP-POPBasicAnimation运用
  4. dart服务器开发性能,DartVM服务器开发(第四天)--代码优化
  5. redis的四大特性和原理
  6. camelCase骆驼拼写法
  7. html下载文件和上传文件(图片)(java后台(HttpServlet))打开保存路径和选择文件录取+(乱码UTF-8)+包...
  8. 基于微信小程序的学生活动管理系统的设计与实现
  9. [ 服务器 ] ___ Linux : Tftpd
  10. 几款pdf转换成word转换器免费版软件
  11. Oracle function语法
  12. pyecharts、plotly图表插入PPT中
  13. 管家婆辉煌Ⅱ TOP 突破系统每年只能做11次12次月结存限制
  14. IMO班聊助力壹米滴答全国“织网” 让每一米、每一秒都更有效率
  15. Codeforces1575 D. Divisible by Twenty-Five(dp)
  16. ImageJ自动细胞计数的方法以及批量处理多张图片
  17. 多文档程序 两个menu框架_汇总9款优秀的开源小程序UI框架
  18. Linux下查看内存泄露的命令
  19. UVA 524素数环
  20. 理解 RxSwift:为什么要使用 RxSwift(一)

热门文章

  1. 鸿蒙系统兼容安卓和web应用是什么,华为发布全新分布式鸿蒙操作系统 兼容全部安卓应用的所有Web应用...
  2. VBA学习之复制粘贴表
  3. 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于阿里云、小程序、Arduino的WS2812灯控系统
  4. 亚马逊云计算机视觉服务,亚马逊云科技宣布Amazon Lookout for Vision正式可用
  5. 怎么解决CAD制图时,图纸导入有问题的现象?
  6. 《蜡笔小新》的作者去世了
  7. 使用灵曜内网穿透 免费实现外网访问内网Vue
  8. 【FFmpeg学习笔记一】FFmpeg简介
  9. excel宏字符串连接mysql_EXCEL 连接字符串 MYSQL
  10. jdk8新特性:Lambda表达式简单测试