如何将我用 gd 创建的图像保存为 png-8?
它可以很好地保存为带有透明通道的 gif - 但我想使用 png-8。
最好的问候, Beerweasle
使用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);
?>
@桑尼
错误假设:任何位深度的 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 通道。
烟花非常擅长。
例子:
基于 dfilkovi 的解决方案,您是否尝试过使用imagesavealpha()保存完整的 alpha 通道信息?
我必须添加行 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);
?>
<?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