【发布时间】:2017-04-13 15:08:45
【问题描述】:
我正在处理 5MB - 6MB 的图像,并使用 PHP Imagick 将它们减小到 600KB 以下的文件大小。通常一次在 3000 到 5000 之间。但是,该过程需要 8-12 小时才能完成。我尝试了两种不同的处理方式:1) 使用 Guzzle Pool 远程检索图像并将它们存储在本地,然后运行转换过程,以及 2) 远程检索图像并存储在 ImageMagick 对象中,处理它们,然后在本地保存。这两种方法似乎都需要花费大量时间才能完成。两种方法在下面调整图像大小并保存它们的过程是相同的,除了从文件中读取图像,如果我已经将它保存在本地。
$imagick = new Imagick();
$imagick->readImageBlob($source);
$imagick->setImageFormat('jpg');
$imagick->setOption('jpeg:extent', '600kb');
$imagick->stripImage();
$imagick->writeImage($destination);
想知道是否还有其他方法可以加快速度。
【问题讨论】:
-
Imagick 有点慢且资源匮乏……如果您只是调整图像大小,您可以尝试使用 GD 库来代替 - 它不太复杂但速度更快。实际上,将图像复制到本地机器并通过 Perl 的系统调用使用 Imagick 处理它们比 PHP 更快。
-
据我了解,imagick 的 jpeg:extent 会尝试不同的压缩级别,直到达到所需的文件大小(请参阅this answer)。您可以采取任何措施来缩短该过程,这将有助于提高速度。您是否也只是减小文件大小或像素尺寸?
-
@CD001 - 根据我的阅读和一些测试,使用命令行并不能提供任何速度。
-
@DaveP - 仅文件大小。感谢您使用维度一词。尝试搜索文件大小会引发很多维度讨论,很难筛选出来。
标签: php imagemagick