0

スプライト ジェネレーターに取り組んでおり、3 つ以上の画像をマージする必要があります。私の問題は、私のスクリプトが少し遅いということだけです:

foreach ($imageData as $i)
{
$image_1 = imagecreatefrompng($timg.'.png');
$image_2 = imagecreatefrompng($imageS[$x]);

imagealphablending($image_1, true);
imagesavealpha($image_1, true); 
$magass = $magass + $imageData[$y][1];
imagecopy($image_1, $image_2, 0, $magass, 0, 0, $imageData[$x][0], $imageData[$x][1]);
                         // <-> | le
imagepng($image_1, $timg.'.png'); 
}

このスクリプトは画像を保存し、その画像に自分の画像をマージして保存します。その後、それを開いて、次の画像を置き、保存し、開いて別の画像を置き、保存など...非常に悪い解決策です。どうすればパフォーマンスを向上させることができますか。では、1 回の保存ですべてをマージするにはどうすればよいでしょうか。

4

1 に答える 1

0

中間ステップを保存しないでください。ベース イメージと、上にマージする他のイメージのリストを提供します。ループ内で一度にすべてのマージを行い最終的な画像を保存します。現在、 を$sourceロードし、 をロードし$merge、オーバーレイし、ファイルを保存してから、すべてのイメージ コードをシャットダウンしています。次の $merge では、それをもう一度繰り返します。たとえば、無駄な作業に多くの CPU サイクルを浪費しています。次のようなものを試してください:

$image_1 = imagecreatefrompng($timg.'.png');
foreach($imagedata as $img) {
    merge($image_1, $img);
}
imagepng($image_1);

ベース イメージを 1 回ロードし、その上に他のすべてのイメージをオーバーレイし、最後に出力を保存します。

于 2013-04-29T15:35:34.480 に答える