0

我运行一个网站,该网站需要定期遍历一堆具有透明度的 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);
4

2 回答 2

1

您绝对应该尝试一下 ImageMagick。它很容易实现,只需使用exec('composite 1.png 2.png');. 它有据可查,不受 PHP 内存限制的限制,性能还可以。

此外,ImageMagick 非常适合作为 bash 脚本或其他终端功能的独立工具,这意味着您所学的内容在 PHP 之外也很有用。

于 2012-09-13T07:29:46.737 回答
1

根据基准,ImageMagick 比 GD 更快。这至少是一个开始。

我不知道您是否也可以将 PHP 的优先级提高到高于正常/高?

于 2012-09-13T07:38:48.877 回答