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代码
Feb 16 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
PHP exif扩展方法开启详解
Jul 28 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
php实现记事本案例
Oct 20 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
建立动态的WML站点(三)
2006/10/09 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
Smarty模板语法详解
2019/07/20 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
js Dialog 实践分享
2012/10/22 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python单元测试unittest实例详解
2015/05/11 Python
常见的python正则用法实例讲解
2016/06/21 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
2020/11/17 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
出纳员岗位职责
2014/03/13 职场文书
《长相思》听课反思
2014/04/10 职场文书
正科级干部考察材料
2014/05/29 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
武当山导游词
2015/02/03 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书