php下尝试使用GraphicsMagick的缩略图功能

 更新时间:2011年01月01日 23:01:45   作者:  
现在,对一个Web程序员来说,图像处理已经属于必会知识之一了。且不说Flickr,Yupoo等专业图片分享网站,就算是一个和图片分享不沾边的网站,也会用到很多图片处理的功能,比如说:用户上传头像,然后自动生成缩略图。
常用的图片处理工具有GDImageMagickGraphicsMagick等等。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),以后的各个例子都会用到它:



BTW:列位看官现在可以咽口水了。

缩略图1

gm convert input.jpg -thumbnail '100x100' output_1.jpg



实际生成的图片大小是:100x75,也就是说说按此命令,会保持图片比例不变生成缩略图。这样很不错,但是有一个潜在的问题:我们不能简单明了的知道图片的最终大小,结果是前端显示的时候,无法设置img标签的width和height属性,如果我没记错的话,一般是推荐设定width和height属性的,否则浏览器渲染起来可能会稍稍慢一点。

缩略图2

gm convert input.jpg -thumbnail '100x100!' output_2.jpg



这次
实际生成的图片大小按定义来,但图片变形了,有时候这是不能接受的。

缩略图3


gm convert input.jpg -thumbnail '100x100^' \
-gravity center -extent 100x100 output_3.jpg



这次不仅保证了大小,还保证了比例。不过图片经过了裁剪。

缩略图4

gm convert input.jpg -thumbnail '100x100' \
-background gray -gravity center -extent 100x100 output_4.jpg



这次不仅保证了大小,还保证了比例,同时没有对图片进行任何裁剪,多余的部分按指定颜色进行填充。

缩略图5

gm convert input.jpg -thumbnail '10000@' \
-background gray -gravity center -extent 100x100 output_5.jpg



这次保证了大小和比例,其中的10000就是100x100的乘积,同时在填充和裁剪之间做了一个平衡。


明白了以上几个例子,缩略图基本就能通吃了,肯定有一种会适合你的需求。GraphicsMagick的资料非常少,但好消息是GraphicsMagick和ImageMagick的用法基本兼容,所以你可以通过
ImageMagick的资料来套用。

补充:如果想让用户手动裁剪头片的话,imgAreaSelect是个好选择。

相关文章

  • PHP使用memcache缓存技术提高响应速度的方法

    PHP使用memcache缓存技术提高响应速度的方法

    这篇文章主要介绍了PHP使用memcache缓存技术提高响应速度的方法,以实例形式分析了memcache缓存技术的使用技巧,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • php使用Jpgraph创建柱状图展示年度收支表效果示例

    php使用Jpgraph创建柱状图展示年度收支表效果示例

    这篇文章主要介绍了php使用Jpgraph创建柱状图展示年度收支表效果,结合完整实例形式分析了Jpgraph创建柱状图的具体步骤与操作技巧,需要的朋友可以参考下
    2017-02-02
  • 新安装的MySQL数据库需要注意的安全知识

    新安装的MySQL数据库需要注意的安全知识

    在你自己安装了一个新的MySQL服务器后,你需要为MySQL的root用户指定一个目录(缺省无口令),否则如果你忘记这点,你将你的MySQL处于极不安全的状态(至少在一段时间内)。
    2008-07-07
  • php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法

    php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法

    在利用php解析xml时提示Invalid byte 1 of 1-byte UTF-8 sequence错误了,这个问题我百度查实说是编码问题,结果我把编码处理一下果然KO了,下面我来分享一下解决办法
    2013-11-11
  • PHP四大安全策略

    PHP四大安全策略

    这篇文章主要介绍了PHP中的文件系统安全、数据库安全、用户数据安全等安全相关的问题,需要的朋友可以参考下
    2014-03-03
  • PHP 数组基本操作小结(推荐)

    PHP 数组基本操作小结(推荐)

    下面小编就为大家带来一篇PHP 数组基本操作小结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 使用PHP的日期与时间函数技巧

    使用PHP的日期与时间函数技巧

    任何一种语言,日期和时间函数都是我们常使用的,下面就教你PHP下的日期和时间的技巧
    2008-04-04
  • php脚本守护进程原理与实现方法详解

    php脚本守护进程原理与实现方法详解

    这篇文章主要介绍了php脚本守护进程原理与实现方法,较为详细的分析了php脚本守护进程的实现思路、原理、格式及具体实现方法,需要的朋友可以参考下
    2017-07-07
  • PHP处理bmp格式图片的方法分析

    PHP处理bmp格式图片的方法分析

    这篇文章主要介绍了PHP处理bmp格式图片的方法,结合具体实例形式分析了PHP操作bmp格式图片的相关函数与使用技巧,需要的朋友可以参考下
    2017-07-07
  • 使用ucenter实现多站点同步登录的讲解

    使用ucenter实现多站点同步登录的讲解

    今天小编就为大家分享一篇关于使用ucenter实现多站点同步登录的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论