我运行一个网站,需要定期循环一堆具有透明度的PNG并将它们合并在一起。有时这可能是一个很长的过程,所以我想知道什么是最有效的方法。我正在使用GD,因为我听说ImageMagick并不是真的更快......
$firstTime = true; // need to know if it's the first time through the loop
$img = null; // placeholder for each iterative image
$base = null; // will become the final merged image
$width = 0;
$height = 0;
while( $src = getNextImageName() ){
$imageHandle = imagecreatefrompng($src);
imageAlphaBlending($imageHandle, true);
imageSaveAlpha($imageHandle, true);
if( $firstTime ){
$w = imagesx( $img ); // first time in we need to
$h = imagesy( $img ); // save the width & height off
$firstTime = false;
$base = $img; // copy the first image to be the 'base'
} else {
// if it's not the first time, copy the current image on top of base
// and then delete the current image from memory
imagecopy($base, $img, 0, 0, 0, 0, $w, $h);
imagedestroy($img);
}
}
// final cleanup
imagepng($base);
imagedestroy($base);
答案 0 :(得分:1)
你一定要试试ImageMagick。它很容易实现,只需使用exec('composite 1.png 2.png');
即可。它有很好的文档记录,不受PHP内存限制的限制,性能还可以。
此外,ImageMagick非常适合作为bash脚本或其他终端函数的独立工具,这意味着您学习的内容在PHP之外非常有用。
答案 1 :(得分:1)
根据a benchmark,ImageMagick比GD更快。这至少是一个开始。
我不知道你是否也可以将PHP的优先级提高到高于正常/高?