0

実際にテストしていないコードを投稿しないでください! 私はこの答えを探すのにしばらく時間を費やしました。ここ StackOverflow にも同様の投稿がいくつかありますが、この一見単純な結果を生成できるものは何も見つかりませんでした。

pngquantは特定の用途には非常に適していますが、この場合、埋めようとしている特定の用途があります。つまり、GD install で汎用 PHP のみを使用します。

これで、関連するコード全体が表示されます! この単純なコードは、半透明のアルファ チャネルを持つハイカラーの PNG 画像を生成します。素晴らしい、シンプルで効果的な作品!

<?php
$img = imagecreatetruecolor(50, 50);
imagesavealpha($img, true);
$color = imagecolorallocatealpha($img, 65, 65, 65, 20);
imagefill($img, 0, 0, $color);

header('content-type: image/png');
imagepng($img, 'test.png');
imagedestroy($img);

print file_get_contents('test.png');
?>

次のほぼ同じコードは、8 ビットの PNG イメージ ファイルを生成しますが、残念ながら、アルファ チャネル データは失われます。

<?php
$img = imagecreatetruecolor(50, 50);
imagesavealpha($img, true);
$color = imagecolorallocatealpha($img, 65, 65, 65, 20);
imagefill($img, 0, 0, $color);
imagetruecolortopalette($img, false, 255); #this line missing in sample above
header('content-type: image/png');
imagepng($img, 'test.png');
imagedestroy($img);

print file_get_contents('test.png');
?>

アルファ チャネルを備えた 8 ビット PNG が明らかに可能であることを知っている場合、PHP GD はそれを実行できますか? PHP GD は無能で、ちょっと七面鳥のようですが、あなたの中には私よりもはるかに進んでいて、何らかの方法で決定的な答えを知っているかもしれません...

助けてくれてありがとう。

4

1 に答える 1

1

パレット変換を行った後に呼び出す必要があると思うimagesavealphaので、新しい/変換されたパレットはアルファ値で「適応」されます。これはうまくいくはずです:

<?php
$img = imagecreatetruecolor(50, 50);

$color = imagecolorallocatealpha($img, 65, 65, 65, 20);
imagefill($img, 0, 0, $color);
imagetruecolortopalette($img, false, 255);

imagesavealpha($img, true);

header('content-type: image/png');
imagepng($img, 'test.png');
imagedestroy($img);

print file_get_contents('test.png');
?>
于 2013-08-24T17:33:53.480 に答える