2010-09-15 69 views
6

我有大量的缩略图可以做。目前,我正在使用ImageMagick,但效率太低(速度太慢,使用太多的CPU /内存等)。最有效的方式来创建缩略图?

我已经开始评估GraphicsMagick,我期望从中得到“哇”的结果。我没有得到它们。谁能带我的基准测试脚本快看(做简单的速度,只有文件大小比较,没有CPU和内存检查还):

http://pastebin.com/2gP7Eaxc

下面是一个示例输出我:

'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高得多。

+3

这是一个大的一次性批次,或者你是否试图将它集成到实时Web应用程序或类似的东西? – dkamins 2010-09-15 22:36:20

+0

这不是一次性的。我会一直在缩略图上看到东西。 – StackOverflowNewbie 2010-09-15 22:44:31

+0

*你想要什么*文件类型的缩略图? PDF? – 2010-09-17 20:45:46

回答

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; 
    } 
    } 
} 
+0

如何指定像素分辨率,要使用的压缩等? – StackOverflowNewbie 2010-09-16 01:08:49

+0

要指定65%的质量(适用于'imagejpeg','imagegif'等等):'imagejpeg($ newImage,$ destination,65);' – 2010-09-16 21:06:08

+0

不确定像素分辨率或压缩具体,但修改质量将间接控制这些。 – 2010-09-16 21:08:26

2

我假设你有某种需要拇指的图像队列,你的应用程序通过它们工作?你可以看一些像EC2这样的工作。如果您的队列超过一定的大小,则启动预先准备好的EC2实例来处理负载。如果队列很大,你甚至可以启动几台机器。

您不需要这些实例始终运行 - 只有当您自己的服务器无法处理负载时才需要这些实例。

很明显,您需要预测您的成本,看看它是否值得,但是您只需支付您使用的时间,并且价格以8.5c /小时开始,这可能足以满足您的需求。

+0

我很惊讶没有缩略图生成的公共AMI。看起来像一个很好的项目来学习EC2,如果有人在寻找一个:-) – dkamins 2010-09-16 19:13:16

1

我建议你使用ExactImage。根据基准测试,它比ImageMagick更快。