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 相关文章推荐
NO3第三帝国留言簿制作过程
Oct 09 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
深入PHP异步执行的详解
Jun 03 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
PHP实现图片压缩的两则实例
Jul 19 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
关于PHP求解三数之和问题详析
Nov 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
3.从实例开始
2006/10/09 PHP
php调用mysql存储过程
2007/02/14 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php汉字转拼音的示例
2014/02/27 PHP
php输入流php://input使用浅析
2014/09/02 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
php实现图片压缩处理
2020/09/09 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
python双向链表实现实例代码
2013/11/21 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
详解django三种文件下载方式
2018/04/06 Python
Python实现的特征提取操作示例
2018/12/03 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
幼儿园义卖活动方案
2014/01/17 职场文书
一岗双责责任书
2014/04/15 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android