8

gdで作成した画像をpng-8として保存するにはどうすればよいですか?

透明なチャンネルでgifとして保存できますが、png-8を使用したいと思います。

よろしく、Beerweasle

4

6 に答える 6

5

imagesavealpha()透明なbgカラーを使用するとうまくいくはずです...

dfilkoviのコードに基づく:

<?php
// Create a new true color image
$im = new imagecreatetruecolor(100, 100);

// Fill with alpha background
$alphabg = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $alphabg);

// Convert to palette-based with no dithering and 255 colors with alpha
imagetruecolortopalette($im, false, 255);
imagesavealpha($im, true);

// Save the image
imagepng($im, './paletteimage.png');
imagedestroy($im);
?>
于 2010-02-24T04:09:48.263 に答える
1

@Sonny

誤った仮定:任意のビット深度のPNGは透明性を持つことができます。png画像のtRNSチャンクに記録されます(トゥルーカラーのものを除く)cfフォーマット定義

cf www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.tRNS

idem www.w3.org/TR/PNG-Chunks.html#C.tRNS

違いは、レコーダーの方法です。RGBAには、ピクセルごとに4つの値(3色と1つのアルファチャネル)を持つ一意のレコードがあり、「パレット」PNGは独自のチャンクにアルファチャネルを記録します。

花火はとても上手です。

例:

http://www.libpng.org/pub/png/pngs-img.html

于 2010-08-13T16:55:50.517 に答える
0

行imagecolortransparent($ im、$ alphabg);を追加する必要がありました。これが機能するためには、次のコード(前の回答から取得)に追加します。

// Fill with alpha background
$alphabg = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagecolortransparent($im, $alphabg);
imagefill($im, 0, 0, $alphabg);

// Convert to palette-based with no dithering and 255 colors with alpha
imagetruecolortopalette($im, false, 255);
imagesavealpha($im, true);

// Save the image
imagepng($im, './paletteimage.png');
imagedestroy($im);
?>
于 2012-07-06T16:29:02.177 に答える
0

これはあなたを助けることができると思います。

http://roseindia.net/tutorial/php/phpgd/About-transparent.html

于 2009-11-19T09:52:02.460 に答える
0
<?php
// Create a new true color image
$im = new imagecreatetruecolor(100, 100);

// Convert to palette-based with no dithering and 255 colors
imagetruecolortopalette($im, false, 255);

// Save the image
imagepng($im, './paletteimage.png');
imagedestroy($im);
?>

これで8ビットpngになります

于 2009-11-19T13:16:17.233 に答える
0

dfilkoviのソリューションに基づいて、imagesavealpha()を使用して完全なアルファチャネル情報を保存しようとしましたか?

于 2010-02-23T10:52:57.207 に答える