graphicsmagick+apache图片请求在线生成规定尺寸图片

1、php代码
$file = $_SERVER ['REQUEST_URI'];//请求字串 /1.jpg@50x50
$srcFile = $_SERVER ['DOCUMENT_ROOT'] .$file;
$desfile = $_SERVER ['DOCUMENT_ROOT'] . '/thumbnail'.$file; //目标目标路径
$dirname = dirname ( $srcFile ) . "/";
 $filename = basename ( $desfile );
if (preg_match ("/(.*)\.(\w+)+@+(\d+)+x+(\d+)/is", $filename, $m )) {
    $srcfile = $dirname . $m [1].'.'.$m[2];
    $width  = $m [3];                    //匹配出输出文件宽度
    $height = $m [4];                    //匹配出输出文件高度
    createThumbnail ( $srcfile, $desfile.'.'.$m[2], $width,$height);
}
function createThumbnail($src,$des,$width,$height){
    if(file_exists($des)){
        header('Content-type: image/jpg');
        $data = file_get_contents($des);
        echo $data;
    }
    $dir = dirname($des);
    if(!is_dir($dir)){
        makeDir($dir);
    }
    $imageinfos = getimagesize ( $src );
    $height = intval($width / $imageinfos[0] *  $imageinfos[1]);
    $wh = $width.'x'.$height;
    $str = "gm.exe convert " .$src. " -thumbnail  ".$wh."  -background gray -gravity center -extent  ".$wh."  ".$des.' 2>&1';
    exec($str,$out,$status);
    if($status == 0){
        header('Content-type: image/jpg');
        $data = file_get_contents($des);
        echo $data;
    }
}
function makeDir($path){
    if(is_dir($path)){
        //已经是目录了就不用创建
        return true;
    }
    if(is_dir(dirname($path))){
        //父目录已经存在,直接创建
        return mkdir($path);
    }
    makedir(dirname($path));//创建各级父目录
    return mkdir($path);//因为有父目录,所以可以创建路径
}
2、apache配置
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} ^.*\.(gif|jpg|jpeg|png)@(.*)$
    RewriteRule ^/.*$ /img.php [PT]

猜你喜欢

转载自blog.csdn.net/lemqs0123/article/details/54948210