PHP gdLib 8位PNG与alpha

时间:2009-11-19 09:27:33

标签: php png gd png-8

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

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

最诚挚的问候, Beerweasle

6 个答案:

答案 0 :(得分:4)

使用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);
?>

答案 1 :(得分:1)

@Sonny

错误假设:任何位深度的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通道。

Fireworks非常擅长。

示例:

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

答案 2 :(得分:1)

我必须添加一行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);
?>

答案 3 :(得分:0)

答案 4 :(得分: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

答案 5 :(得分:0)

在dfilkovi的解决方案的基础上,您是否尝试使用imagesavealpha()保存完整的Alpha通道信息?