【发布时间】:2017-10-31 18:47:39
【问题描述】:
我正在开发一个项目,客户可以通过将不同的图层(图像)合并为单个图像来创建动态图像,然后将生成的图像显示给客户端。目前我的代码是这样的
$output = uniqid().'.jpg';
exec('convert -size 600x800 xc:white '.$output);
$layers = array(//array of about hundreds of PNG images);
foreach($layers as $key => $singleLayer)
{
$layerIs = $singleLayer['image'];
$positionsXY = explode(',', $singleLayer['xy']);
exec('composite -geometry +'.$positionsXY[0].'+'.$positionsXY[1].' '.$layerIs.' '.$output.' '.$output);
}
$base64 = base64_encode(file_get_contents($output));
unlink($output);
return 'data:image/jpeg;base64,'.$base64;
在我上面的代码中,我正在生成一个白色背景图像,然后在其上合并多个 PNG 图像,这些图像超过 100 个。同时每次合并单个图层时都会保存此图像,然后将最终图像输出到客户端删除生成的图像后。这一切都需要大约 15 秒来完成。
所以,我的问题是,如果 ImageMagick 有一个选项可以让我将图像保存在内存上而不是保存在硬盘上,这反过来又可以加快我的处理速度?
虽然我找到了这个http://www.imagemagick.org/discourse-server/viewtopic.php?t=20295,但我不太明白我该如何实现它。
【问题讨论】:
-
您可以尝试使用image magick的readImageBlob函数:php.net/manual/en/imagick.readimageblob.php并使用image magick对象的
__toString方法将图像输出到一个变量中。 -
@Jite 我在 ImageMagick 中并不聪明。如果您不介意,您可以用很少的代码详细说明,以便我更好地理解它。请注意,我使用 exec() 命令来处理 ImageMagick 而不是 PHP 过程语言。因此,在其中使用变量会造成一些混乱:(
-
我首先推荐使用 imagemagick 的 php 扩展。那可能吗?检查您的
phpinfo()并查看它是否已安装。根据答案,我会尝试给你一些进一步的解释。 -
@Jite 是的,它已安装,因为我有 VPS 并且我已经安装了它
标签: php html image-processing imagemagick gd