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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
php ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
php实例分享之mysql数据备份
May 19 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
PHP类的封装与继承详解
Sep 29 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP7新特性
Mar 09 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,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
php 定界符格式引起的错误
2011/05/24 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
php的socket编程详解
2016/11/20 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python的subprocess模块总结
2014/11/07 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
Python 求向量的余弦值操作
2021/03/04 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
个人收入证明范本
2014/01/12 职场文书
大学生旷课检讨书
2014/01/22 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
不错的求职信范文
2014/07/20 职场文书
学生会个人总结范文
2015/02/15 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL