
使用URLRewrite+实时处理+缓存
淘宝的图片就是使用这种方法来处理的。根据原图使用graphmagick去生成缩略图
简要得代码
nginx rewrite:
rewrite ^/upload/(.+)_(\d+)_(\d+)\.(jpg|png|gif) /upload/thumb.php?src=$1&w=$2&h=$3&type=$4;
php:
$src= $_REQUEST["src"];
$width = $_REQUEST["w"];
$height = $_REQUEST["h"];
$type = strtolower($_REQUEST["type"]);
$filename = $src.".".$width."x".$height.".".$type;
if(!file_exists($filename))
{
$im = new Imagick();
$im- > readImage($src);
if($im- > getImageWidth() > =$im- > getImageHeight())
{
$im- > cropThumbnailImage( $width, $height );
}else
{
$im- > cropImage($im- > getImageWidth(),$im- > getImageWidth(),0,0);
$im- > cropThumbnailImage($width,$height);
}
$im- > writeImage($filename);
$im- > destroy();
}
$contenttype = "";
switch($type)
{
case "jpg":$contenttype = "jpeg";break;
case "jpeg":$contenttype = "jpeg";break;
case "png":$contenttype = "png";break;
case "gif":$contenttype = "gif";break;
}
header("Content-type:image/".$contenttype);
readfile($filename);
