- 在线时间
- 702 小时
- 专家
- 0
- UID
- 54845
- 注册时间
- 2003-6-28
- 帖子
- 1959
- 精华
- 1
- 积分
- 6859
- 离线
- 28 天
专长: PHP,MySQL,网络管理
- 帖子
- 1959
- 体力
- 6564
- 威望
- 59
|
发表于 2008-8-15 00:01:36
|显示全部楼层
一直听说ImageMagick,但今天因为需要做一个缩略图,所以特意了解一下ImageMagick。
ImageMagick,可以作为PHP的dll使用,也可以用命令行的方式调用。有windows和linux等各个平台的版本,所以要用起来真的是非常方便!不作为PHP的dll,也可以通过exec调用,那更加的不错,对于喜欢命令行做处理的人,那是相当的方便。
刚开始就想着投入到各个参数的了解当中,一片的英文,搞的我头晕,看来强硬的英文水平是做技术的一个前提了,呵呵。
我想做的就是一个事情,把图片做缩略图,关键是等比缩小,取中间的部分作为图片文件。于是刚刚开始就想着看看有哪些参数是干嘛的,ImageMagick提供太多的功能了,以至于我这类人要了解完还真难,了解了几个关键参数 -resize -crop,但用这个一步做不出图片来,而且在windows下面还有部分命令有点问题,比如输入:
convert aslibra.com.jpg -resize 100x100^ www.aslibra.com.jpg
没有得到如期的效果,应该是每个边都大于100,后来知道是需要用引号括起来,windows下还必须是双引号,但是第一阶段做了个读取图片宽高,实现该功能的函数:
- //by hqlulu @ www.aslibra.com
- function img_resize($file,$output,$w=0,$h=0,$method="resize",$center=true){
- if(!$w && !$h)return false;
- $tmp_file = "tmp_resize.jpg";
- if($method == "crop"){
- if($center){
- //先调整大小
- $wh = getimagesize($file);
- if(!$wh[0] || !$wh[1])return false;
- if(!$w || !$h)return false;
-
- if($wh[0]/$wh[1] >= $w/$h){
- img_resize($file,$tmp_file,0,$h);
- }else{
- img_resize($file,$tmp_file,$w,0);
- }
- $file = $tmp_file;
- }
- $c = " -gravity Center ";
- $m = " $c -$method {$w}x{$h}+0+0 ";
- }else{
- if($w && $h){
- $m = " -$method {$w}x{$h} ";
- }else if($w && !$h){
- $m = " -$method {$w} ";
- }else if(!$w && $h){
- $m = " -$method x{$h} ";
- }
- }
- $cmd = "convert $file $m $output";
- exec($cmd,$out);
- }
复制代码
后来看了一下usage,里面有很多很多的示例,太棒了,简直一个photoshop的教程:
http://www.imagemagick.org/Usage/
也发现了前面不能实现的功能的原因,同时发现了一句话完成我的需求的方法:
- convert www.aslibra.com.jpg -thumbnail "100x100^" -gravity center -extent 100x100 center.gif
复制代码
函数可以精简一下了,并且可以加上一个缩略图的截取部分的比例:
- function img_resize($file,$output,$w=0,$h=0,$method="resize",$percent=0){
- // == usage ==
- //resize by w : img_resize($file,$output,100)
- //resize by h : img_resize($file,$output,0,100)
- //resize by w&h : img_resize($file,$output,100,100)
- //crop by w&h : img_resize($file,$output,100,100,'crop')
- //crop by w&h&percent : img_resize($file,$output,100,100,'crop',0.8)
- //
- //2008-8-14
- //by hqlulu
- //www.aslibra.com
- //
- if(!$w && !$h)return false;
- if($method == "crop"){
- if($percent){
- $w1=intval($w/$percent);
- $h1=intval($h/$percent);
- $m = " -thumbnail \"{$w1}x{$h1}^\" -gravity center -extent {$w}x{$h} ";
- }else{
- $m = " -thumbnail \"{$w}x{$h}^\" -gravity center -extent {$w}x{$h} ";
- }
- }else{
- if($w && $h){
- $m = " -$method {$w}x{$h} ";
- }else if($w && !$h){
- $m = " -$method {$w} ";
- }else if(!$w && $h){
- $m = " -$method x{$h} ";
- }
- }
- $cmd = "convert $file $m $output";
- exec($cmd,$out);
- }
复制代码
另外,如果有可能处理CMYK的图片,那可以做个强制颜色空间的参数
-colorspace RGB
这个功能就完成了! |
-
总评分: 威望 + 2
查看全部评分
|