php下尝试使用GraphicsMagick的缩略图功能


Posted in PHP onJanuary 01, 2011

常用的图片处理工具有GD,ImageMagick,GraphicsMagick等等。GD就是个阿斗,略过不提;ImageMagick是目前最流行的图片处理工具,它的功能非常丰富;GraphicsMagick的功能略逊于ImageMagick,但是它的效率更强悍,就好比Apache和Nginx一样,一个功能更强,一个效率更胜。

现在更看重效率,所以本文就以GraphicsMagick为例来说说:

对于PHPer来说,有两种使用GraphicsMagick的方式:

1:使用PECL Gmagick扩展。
2:使用GraphicsMagick命令行。

PECL扩展的方式我并不喜欢,一来PECL代码Bug多多,二来PECL扩展的实现,代码写起来很罗嗦:比如缩放一个GIF动画图片,如果你用命令行的方式,一句话就搞定,而用PECL扩展的话,还得先算动画有几帧,再循环处理,很麻烦。所以说我更倾向于使用命令行的方式,虽然命令行操作听起来很“重”,但如果建立若干台图片服务器,通过Gearman连接起来,其实很是很有弹性的。

下面我们就以GraphicsMagick为例,采用命令行的方式来看看如何使用缩略图功能:

先上一个原始图片(input.jpg:160x120),以后的各个例子都会用到它:

php下尝试使用GraphicsMagick的缩略图功能

BTW:列位看官现在可以咽口水了。

缩略图1

gm convert input.jpg -thumbnail '100x100' output_1.jpg

php下尝试使用GraphicsMagick的缩略图功能

实际生成的图片大小是:100x75,也就是说说按此命令,会保持图片比例不变生成缩略图。这样很不错,但是有一个潜在的问题:我们不能简单明了的知道图片的最终大小,结果是前端显示的时候,无法设置img标签的width和height属性,如果我没记错的话,一般是推荐设定width和height属性的,否则浏览器渲染起来可能会稍稍慢一点。

缩略图2

gm convert input.jpg -thumbnail '100x100!' output_2.jpg

php下尝试使用GraphicsMagick的缩略图功能

这次实际生成的图片大小按定义来,但图片变形了,有时候这是不能接受的。

缩略图3

gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg

php下尝试使用GraphicsMagick的缩略图功能

这次不仅保证了大小,还保证了比例。不过图片经过了裁剪。

缩略图4

gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg

php下尝试使用GraphicsMagick的缩略图功能

这次不仅保证了大小,还保证了比例,同时没有对图片进行任何裁剪,多余的部分按指定颜色进行填充。

缩略图5

gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg

php下尝试使用GraphicsMagick的缩略图功能

这次保证了大小和比例,其中的10000就是100x100的乘积,同时在填充和裁剪之间做了一个平衡。

明白了以上几个例子,缩略图基本就能通吃了,肯定有一种会适合你的需求。GraphicsMagick的资料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通过ImageMagick的资料来套用。

补充:如果想让用户手动裁剪头片的话,imgAreaSelect是个好选择。

PHP 相关文章推荐
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
PHP技术开发技巧分享
Mar 23 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP 查找字符串常用函数介绍
Jun 07 PHP
php计算十二星座的函数代码
Aug 21 PHP
php获取目标函数执行时间示例
Mar 04 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
PHP与Web页面的交互示例详解二
Aug 04 PHP
PHP读取XML值的代码(推荐)
Jan 01 #PHP
PHP中simplexml_load_string函数使用说明
Jan 01 #PHP
php xml 入门学习资料
Jan 01 #PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 #PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 #PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 #PHP
php防攻击代码升级版
Dec 29 #PHP
You might like
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
影响jQuery使用的14个方面
2014/09/01 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
python实现简单温度转换的方法
2015/03/13 Python
使用python实现ANN
2017/12/20 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
python实现剪切功能
2019/01/23 Python
详解Python的三种可变参数
2019/05/08 Python
python实现贪吃蛇双人大战
2020/04/18 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
软件测试企业面试试卷
2016/07/13 面试题
运动会开幕式解说词
2014/02/05 职场文书
重阳节活动总结
2014/08/27 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
python 算法题——快乐数的多种解法
2021/05/27 Python