8

如何将我用 gd 创建的图像保存为 png-8?

它可以很好地保存为带有透明通道的 gif - 但我想使用 png-8。

最好的问候, Beerweasle

4

6 回答 6

5

使用imagesavealpha()透明的背景颜色应该可以解决问题...

基于 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

@桑尼

错误假设:任何位深度的 PNG 都可以具有透明度。它记录在png图像的tRNS块中(真彩色除外)cf格式定义

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

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

不同之处在于它是记录器:RGBA 每个像素有一个唯一的记录,有 4 个值(3 种颜色和 1 个 alpha 通道),其中“调色板”PNG 在其自己的块中记录 alpha 通道。

烟花非常擅长。

例子:

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

于 2010-08-13T16:55:50.517 回答
0

我认为这可以帮助你。

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

于 2009-11-19T09:52:02.460 回答
0

基于 dfilkovi 的解决方案,您是否尝试过使用imagesavealpha()保存完整的 alpha 通道信息?

于 2010-02-23T10:52:57.207 回答
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
<?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);
?>

这应该是 8bit png

于 2009-11-19T13:16:17.233 回答