我有大量的缩略图要做。目前,我正在使用ImageMagick,但它证明效率太低(它太慢,使用太多的CPU /内存等)。
我已经开始评估GraphicsMagick,我希望得到“哇”的结果。我没有得到它们。有人可以快速查看我的基准脚本(仅进行简单的速度和文件大小比较;还没有CPU和内存检查):
这是我得到的示例输出:
'gm convert' took 75.0039 seconds to execute 10 iteration(s).
'convert' took 83.1421 seconds to execute 10 iteration(s).
Average filesize of gm convert: 144,588 bytes.
Average filesize of convert: 81,194 bytes.
GraphicsMagick的速度并不快 - 输出的文件大小比ImageMagick高很多。
答案 0 :(得分:2)
我假设您有某种需要拇指的图像队列,而您的应用程序可以通过它们进行操作?你可以把一些工作的东西抽到像EC2那样的东西上。如果您的队列超过一定大小,则启动预先准备好的EC2实例来处理负载。如果队列很大,你甚至可以启动几台机器。
您不需要这些实例一直运行 - 只有当您自己的服务器无法处理负载时才需要它们。
显然,你需要预测你的成本,看看它是否值得,但鉴于你只需支付你使用的时间,价格从8.5c /小时开始,它可能足以满足你的需求。
答案 1 :(得分:1)
我想使用GD2,尝试我使用的这个功能。这很容易使用:
function scaleImage($source, $max_width, $max_height, $destination) {
list($width, $height) = getimagesize($source);
if ($width > 150 || $height > 150) {
$ratioh = $max_height / $height;
$ratiow = $max_width / $width;
$ratio = min($ratioh, $ratiow);
// New dimensions
$newwidth = intval($ratio * $width);
$newheight = intval($ratio * $height);
$newImage = imagecreatetruecolor($newwidth, $newheight);
$exts = array("gif", "jpg", "jpeg", "png");
$pathInfo = pathinfo($source);
$ext = trim(strtolower($pathInfo["extension"]));
$sourceImage = null;
// Generate source image depending on file type
switch ($ext) {
case "jpg":
case "jpeg":
$sourceImage = imagecreatefromjpeg($source);
break;
case "gif":
$sourceImage = imagecreatefromgif($source);
break;
case "png":
$sourceImage = imagecreatefrompng($source);
break;
}
imagecopyresampled($newImage, $sourceImage, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// Output file depending on type
switch ($ext) {
case "jpg":
case "jpeg":
imagejpeg($newImage, $destination);
break;
case "gif":
imagegif($newImage, $destination);
break;
case "png":
imagepng($newImage, $destination);
break;
}
}
}
答案 2 :(得分:1)
我建议你使用ExactImage。根据基准测试,它比ImageMagick更快。