我最近遇到了同样的问题,但我只通过图像一次将它们从原来的 2592x1944 调整为 300xbestFit 或 bestFitx300
我使用的是 PHP 类 imagick 而不是命令行,但在我的情况下,我通过更改为 -scale 或 scaleImage 将我的时间缩短了一半。这是我的测试代码片段。
while ($images = readdir($handle)) {
// check to see if the first or second character is a '.' or '..',
// if so then remove from list
if (substr($images,0,1) != '.') {
//Check files to see if there extensions match any of the following image extensions.
// GLOB_BRACE looks for all glob criteria within the {braces}
$images = glob($dir."{*.gif,*.jpg,*.png,*.jpeg}", GLOB_BRACE);
// the glob function gives us an array of images
$i = 0;
foreach ($images as $image) {
// parse the data given and remove the images/ $dir,
// imagemagick will not take paths, only image names.
$i++;
list ($dir, $image) = split('[/]', $image);
echo $i, " ", $image, "<br />";
$magick = new Imagick($dir."/".$image);
$imageprops = $magick->getImageGeometry();
if ($imageprops['width'] <= 300 && $imageprops['height'] <= 300) {
// don't upscale
} else {
// 29 Images at 2592x1944 takes 11.555036068 seconds ->
// output size = 300 x 255
$magick->scaleImage(300,300, true);
// 29 Images at 2592x1944 takes 23.3927891254 seconds ->
// output size = 300 x 255
//$magick->resizeImage(300,300, imagick::FILTER_LANCZOS, 0.9, true);
$magick->writeImage("thumb_".$image);
}
}
}
}
我正在以 2592x1944 处理 29 张图像,从 23.3927891254 秒到 11.555036068 秒。我希望这有帮助。
编辑:
除了我上面所说的之外,我刚刚在ImageMagick v6 示例——API 和脚本中遇到了以下内容,这可能会有所帮助:
“Shell 脚本本来就很慢。它被解释,需要多个步骤和额外的文件处理到磁盘。这当然更好,这要归功于新的 IM v6 选项处理,允许您在单个命令中执行大量图像处理操作. 即使这样你也很少能在一个convert
命令中完成所有事情,所以你经常不得不使用多个命令来实现你想要的。”
“当读取大量甚至大量图像时,最好使用读取修改器来调整大小或裁剪它们,因为 IM 不会将它们读取完整图像,从而减少其内存需求。”
“如果您将 ImageMagick 称为 Apache 模块,它还将减少启动时间,因为部件将被加载一次并保持可供多次使用,而不是需要一遍又一遍地重新加载。这在未来可能会变得更加实用,永久运行“守护进程”IM 进程。”