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验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
PHP代码审核的详细介绍
Jun 13 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
Codeigniter操作数据库表的优化写法总结
Jun 12 PHP
php修改指定文件后缀的方法
Sep 11 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jquery中文乱码的多种解决方法
2013/06/21 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js charAt的使用示例
2014/02/18 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
python构建基础的爬虫教学
2018/12/23 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
酒店led欢迎词
2014/01/09 职场文书
证婚人经典证婚词
2014/01/09 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript