Php 创建缩略图的最有效方法是什么?
我有大量的手指甲要做。目前,我正在使用ImageMagick,但它的效率太低(太慢,占用太多CPU/内存,等等) 我已经开始评估GraphicsMagick,我希望从中获得“哇”的结果。我没弄明白。有人可以快速查看一下我的基准脚本(只进行简单的速度和文件大小比较;还没有CPU和内存检查): 以下是我得到的示例输出:Php 创建缩略图的最有效方法是什么?,php,graphics,image-processing,imagemagick,graphicsmagick,Php,Graphics,Image Processing,Imagemagick,Graphicsmagick,我有大量的手指甲要做。目前,我正在使用ImageMagick,但它的效率太低(太慢,占用太多CPU/内存,等等) 我已经开始评估GraphicsMagick,我希望从中获得“哇”的结果。我没弄明白。有人可以快速查看一下我的基准脚本(只进行简单的速度和文件大小比较;还没有CPU和内存检查): 以下是我得到的示例输出: 'gm convert' took 75.0039 seconds to execute 10 iteration(s). 'convert' took 83.1421 secon
'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。如果要使用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;
}
}
}
我假设你有一些需要拇指的图像队列,你的应用程序可以通过它们工作?您可以考虑将一些工作转移到类似EC2的地方。如果队列超过一定大小,则启动一个预先准备好的EC2实例来处理负载。如果队列很大,你甚至可以启动几台机器 您不需要一直运行这些实例—您只需要在您自己的服务器无法处理负载时才需要它们
显然,你需要预测你的成本,看看是否值得,但考虑到你只为使用时间付费,而且价格从8.5 C/小时开始,这对于你的需求来说可能已经足够经济了。我建议你使用ExactImage。根据基准测试,它比ImageMagick快。这是一个一次性的大批量产品,还是您正在尝试将其集成到实时web应用程序或类似产品中?这不是一次性的。我将随时将内容设置为缩略图。您希望缩略图来自哪种文件类型?PDF?如何指定像素分辨率、要使用的压缩等?指定65%的质量(适用于
imagejpeg
、imagegif
等):imagejpeg($newImage,$destination,65)代码>不确定具体的像素分辨率或压缩,但修改质量将间接控制这些。我很惊讶没有用于生成缩略图的公共AMI。如果有人想要学习EC2,这似乎是一个很好的项目:-)