imagemagick根据请求生成大小缩略图

安装JPG,PNG开发包

apt-get install libjpeg62-dev libpng12-dev libtiff4-dev

安装ImageMagick和imagick


tar zxvf ImageMagick.tar.gz   
cd ImageMagick-6.5.1-2/   
./configure   
make   
make install   
cd ../   
  
tar zxvf imagick-2.3.0.tgz   
cd imagick-2.3.0/   
/usr/local/webserver/php/bin/phpize   
./configure --with-php-config=/usr/local/webserver/php/bin/php-config   
make   
make install   
cd ../  

如果:no decode delegate for this image format
安装:apt-get install libjpeg62-dev libpng12-dev libtiff4-dev后再重新安装ImageMagick和imagick

如果:libMagickCore.so.5: cannot open shared object file
执行命令:ldconfig /usr/local/lib

修改php.ini
extension = "imagick.so"

重启php-fpm
/etc/init.d/php5-fpm restart

增加rewrite
rewrite ^/uploads/(.*)\.(.*)$ /img.php last;

重启nignx
nginx -s reload

增加img.php代码处理

<?php   
    
/*
        A  thumbnail creation.  
*/    
    
/* Create the Imagick object */  
$img = $_SERVER['REQUEST_URI'];   
  
  
define('DEDEROOT', str_replace("\\", '/', dirname(__FILE__) ) );
preg_match("/(.*)_(\d+)_(\d+)\.(\w+)/is",$img,$match);  
 
$getWidth = $match[2];  
$getHeight = $match[3];  
$normalImg = DEDEROOT. $match[1].".".$match[4];  
$smallImg = DEDEROOT. $match[0];  
$im = new Imagick();  
 
if (!$match[4] || !file_exists($normalImg)) {  
        $normalImg =  DEDEROOT. $img;  
        if (!file_exists($normalImg)) {  
                //没有图片  
                header("HTTP/1.1 404 Not Found");  
                exit;  
        }  
        //使用原图  
        $im->readImage( $normalImg);  
        header( "Content-Type: image/{$im->getImageFormat()}" );  
        echo $im->getImageBlob();  
        $im->destroy();  
        exit;  
}  
/* Read the image file */  
$im->readImage( $normalImg);  
 
if ($getWidth && $getHeight) {  
        $srcWH = $im->getImageGeometry();   
            
        $rate_w  = $getWidth / $srcWH['width'];  
        $rate_h  = $getHeight / $srcWH['height'];  
   
        $rate    = ($rate_w > $rate_h) ? $rate_w : $rate_h;  
        $rate = $rate > 1 ? 1 : $rate;  
        $thumb_w = round($srcWH['width'] * $rate);  
        $thumb_h = round($srcWH['height'] * $rate);  
        //缩略   
        $im->thumbnailImage( $thumb_w, $thumb_h );  
        if ($thumb_w>$getWidth || $thumb_h>$getHeight) {  
                $fromX = ($thumb_w-$getWidth)/2;  
                //剪切  
                $im->cropImage($getWidth, $getHeight,$fromX,0);  
        }  
} elseif ($getWidth && !$getHeight) {  
        $im->thumbnailImage( $getWidth, null);  
} elseif (!$getWidth && $getHeight) {  
        $im->thumbnailImage(null, $getHeight );  
}  
 
/* Write the thumbail to disk */  
$im->writeImage($smallImg);  
   
 
header( "Content-Type: image/{$im->getImageFormat()}" );   
echo $im->getImageBlob();   
  
/* Free resources associated to the Imagick object */  
$im->destroy();   
    
?>  

优化:

nginx的rewrite时可以做个判断,如果已经有生成的图片则直接显示。不用再到php里处理。

if (!-f $request_filename) {
     rewrite ^/uploads/(.*)\.(.*)$ /img.php last;
}

参考:

http://www.digitalsanctum.com/2009/03/18/installing-imagemagick-from-source-on-ubuntu-804/
http://bootpolish.net/home_howto_installimagemagick
http://wenku.baidu.com/view/2e93f278168884868762d689.html
http://apps.hi.baidu.com/share/detail/37348887
http://hi.baidu.com/houwenbin1986/blog/item/a0afa1fa3adcad294e4aea48.html
http://www.zhouchen33.com/index.php/archives/284


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值