我正在处理客户机可以通过将不同图层(图像)合并到单个图像中然后将生成的图像显示给客户机来创建动态图像的项目。目前,我的代码是这样的将图像保存到RAM上并使用ImageMagick对其进行处理
$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有一个选项,可以让我在RAM上保存图像,而不是将图像保存在硬盘上,这反过来可以加快我的处理速度?
虽然我发现这个http://www.imagemagick.org/discourse-server/viewtopic.php?t=20295,但是我不明白怎么实现它。
您可以尝试使用image magick的readImageBlob函数:http://php.net/manual/en/imagick.readimageblob.php并使用图像magick对象的__toString方法将图像输出为变量。 – Jite
@Jite我在ImageMagick中并不聪明。如果你不介意可以用很少的代码来详细说明,那么我可以更好地理解它。请注意,我使用exec()命令来处理ImageMagick而不是PHP程序语言。因此,使用变量会造成一些混淆: –
我会先推荐使用imagemagick的php扩展名,这是可能的吗?检查你的'phpinfo()'并查看它是否安装。根据答案,我会尝试给你一些进一步的解释。 – Jite