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类
Oct 09 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
php提示undefined index的几种解决方法
May 21 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php MessagePack介绍
Oct 06 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
php中数组最简单的使用方法
Dec 27 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实现快速排序法函数代码
2012/08/27 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php中的ini配置原理详解
2014/10/14 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
Python 查看文件的读写权限方法
2018/01/23 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
Python 实现向word(docx)中输出
2020/02/13 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
Python计算IV值的示例讲解
2020/02/28 Python
解决Django no such table: django_session的问题
2020/04/07 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
python3 字符串str和bytes相互转换
2022/03/23 Python
MySQL如何使备份得数据保持一致
2022/05/02 MySQL