MagicWand的缩略图

以前用GD做缩略图,效率不高,而且图片处理的功能太弱,刚才安装了MagicWand,发现真是太强了,效率和功能等等可以比ps强。gd简直像个小娃娃,用新东方老罗的话就是:太方便了太方便了。为了熟悉环境,顺手写了一个做缩略图函数,摘录如下


/**
 * 按照最佳宽高比例生成图片的PNG缩略图
 *
 * 注:
 * 缩放算法和ImageMagic convert -resize -thumbnial一样
 * 缩略图的mtime和原始文件相同。
 *
 * @param string $srcFile 原始文件路径
 * @param int $width 缩略图最大宽度(像素)
 * @param int $height 缩略图最大高度(像素)
 * @param string $thumbFile 缩略图的路径
 * @return boolean
 *
 */
function makeThumb($srcFile,$width,$height,$thumbFile){
    $img= NewMagickWand();
    if(!MagickReadImage($img,$srcFile)){
        return false;
    }
    $oriHeight = MagickGetImageHeight($img);
    $oriWidth = MagickGetImageWidth($img);
    $xratio = $width/$oriWidth;
    $yratio = $height/$oriHeight;
    if($xratio < $yratio) {
        $height = floor($oriHeight*$xratio);
    }else{
        $width = floor($oriWidth*$yratio);
    }
    //去掉颜色配置等注释信息
    MagickRemoveImageProfiles($img);
    //使用PointFilter方式缩放到5倍的目标大小
    MagickSampleImage($img,$width*5,$height*5);
    //Resize到目标尺寸,同时锐化处理
    MagickResizeImage($img,$width,$height,MW_PointFilter,0.45);
    MagickSetImageFormat($img,'image/png');
    $ok = MagickWriteImage($img,$thumbFile);
    DestroyMagickWand($img);
    $mTime = filemtime($srcFile);
    @touch($thumbFile,date('U',$mTime));
    return $ok;
}

Comments

2 Responses to “MagicWand的缩略图”

  1. goldfish on February 8th, 2007 12:52 am

    你好,问你个问题,php_imagick.dll加载不了,不知道什么原因。这个问题困拢我4天了,能不能请您指点一下下,小弟谢了先。
    错误提示:
    PHP Warning: Unknown(): Unable to load dynamic library ‘C:\PHP\extensions\php_imagick.dll’ – 找不到指定的程序。 in Unknown on line 0

    我的配置是 php4.4.4+iis5.0+windows2k

  2. nightsailer on February 19th, 2007 1:26 pm

    一般都是因为你没有安装imagemagic的dll,如果你不想单独安装imagemagick,你需要装static版本的php_imagick.dll,它把imagmagic都link进来了

Leave a Reply