一直听说
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
这个功能就完成了!