6

「red.png」と「blue.png」の2つのPNGファイルがあります。どちらもほとんど透明ですが、さまざまな場所に赤または青の斑点が数ピクセルあります。

2つをマージするPHPスクリプトを作成したいと思います。次のような単純なものにする必要があります。

$original = getPNG('red.png');
$overlay = getPNG('blue.png');

imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original),   100);
header('Content-Type: image/png');
imagepng($original);

このスクリプトを実行すると、透明度が失われた青い点だけが表示されます。私はこれらを追加する必要があることを見ました:

imagealphablending($original, false);
imagesavealpha($original, true);

(オリジナルとオーバーレイの両方で?)そしてそれは何の役にも立たないようです。

PHP.netでいくつかの回避策を見ましたが、これは次のようなものです。

$throwAway = imagecreatefrompng($filename);
imagealphablending($throwAway, false);
imagesavealpha($throwAway, true);
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway));
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway),     imagesy($throwAway),          imagesx($throwAway), imagesy($throwAway));

、PNGを「トゥルーカラー」画像に変換し、透明度を維持する必要があります。そうしているように見えますが、今私が見るのは黒の背景に青だけです。

私は何をしますか?!

4

1 に答える 1

7

これは私にとって完璧に機能します:

$img1 = imagecreatefrompng('red.png');
$img2 = imagecreatefrompng('blue.png');

$x1 = imagesx($img1);
$y1 = imagesy($img1);
$x2 = imagesx($img2);
$y2 = imagesy($img2);

imagecopyresampled(
    $img1, $img2,
    0, 0, 0, 0,
    $x1, $y1,
    $x2, $y2);

imagepng($img1, 'merged.png', 0);

PHPバージョン5.3.2GDバージョン
2.0libPNG
バージョン1.2.42

画像をファイルに保存して確認してみましたか?

于 2010-07-28T19:02:49.603 に答える