一些网站的图片只要修改 URL 地址就能得到任何尺寸的图片,是如何做到的?

一些网站的图片只要修改 URL 地址就能得到任何尺寸的图片,是如何做到的?

使用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);