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录入页面中动态从数据库中提取数据的实现
Oct 09 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
解析PHP汉字转换拼音的类
Jun 18 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
PHP错误处理函数
Apr 03 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
laravel-admin 中列表筛选方法
Oct 03 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 巧用数组降低程序的时间复杂度
2010/01/01 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Python 忽略文件名编码的方法
2020/08/01 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
行政主管岗位职责
2013/11/18 职场文书
音乐教学反思
2014/02/02 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
学习保证书
2015/01/17 职场文书
党员个人总结自评
2015/02/14 职场文书
小学安全教育主题班会
2015/08/12 职场文书
学校学期工作总结
2015/08/13 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
Python数据分析入门之数据读取与存储
2021/05/13 Python
Django路由层如何获取正确的url
2021/07/15 Python