如何将使用gd创建的图像保存为png-8?
它可以很好地保存透明通道的gif - 但我想使用png-8。
最诚挚的问候, Beerweasle
答案 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非常擅长。
示例:
答案 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通道信息?