Php 创建缩略图的最有效方法是什么?

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

我有大量的手指甲要做。目前,我正在使用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。

如果要使用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,这似乎是一个很好的项目:-)