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 相关文章推荐
BBS(php & mysql)完整版(四)
Oct 09 PHP
PHP 一个随机字符串生成代码
May 26 PHP
PHP的SQL注入过程分析
Jan 06 PHP
php类中private属性继承问题分析
Nov 01 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
php查看网页源代码的方法
Mar 13 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
php libevent 功能与使用方法详解
Mar 04 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 判断变量类型实现代码
2009/10/23 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
DEFER怎么用?
2006/07/01 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python单例模式实例详解
2017/03/01 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
python读取图片任意范围区域
2019/01/23 Python
Django更新models数据库结构步骤
2020/04/01 Python
flask开启多线程的具体方法
2020/08/02 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
出纳工作岗位责任制
2014/02/02 职场文书
节约能源标语
2014/06/17 职场文书
2014年纪检工作总结
2014/11/12 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android