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 事务处理数据实现代码
May 13 PHP
php debug 安装技巧
Apr 30 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
php中stream(流)的用法
Mar 25 PHP
php时间戳转换的示例
Mar 31 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
初识Laravel
Oct 30 PHP
php简单获取复选框值的方法
May 11 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 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 项目的方法
2007/01/02 PHP
使用eAccelerator加密PHP程序
2008/10/03 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
刷新时清空文本框内容的js代码
2007/04/23 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
js实现查询商品案例
2020/07/22 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python科学计算之Pandas详解
2017/01/15 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Numpy掩码式数组详解
2018/04/17 Python
python requests post多层字典的方法
2018/12/27 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python的历史与优缺点整理
2020/05/26 Python
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
计划生育个人总结
2015/03/02 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
详解python网络进程
2021/06/15 Python
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers