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
PHP用户指南-cookies部分
Oct 09 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
Node.js pipe实现源码解析
2017/08/12 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
python二叉树的实现实例
2013/11/21 Python
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Pytorch入门之mnist分类实例
2018/04/14 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
大学生大二自我鉴定
2013/10/28 职场文书
SQL Server实现分页方法介绍
2022/03/16 SQL Server
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android