PHP gdLib 8-битный PNG с альфа - PullRequest
7 голосов
/ 19 ноября 2009

как можно сохранить мое изображение, созданное с помощью gd, в виде png-8?

хорошо сохраняет как gif с прозрачным каналом - но я хочу использовать png-8.

С наилучшими пожеланиями, Beerweasle

Ответы [ 6 ]

4 голосов
/ 24 февраля 2010

Использование imagesavealpha () и прозрачного цвета bg должно помочь ...

На основании кода дфилкови:

<?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 голос
/ 06 июля 2012

Мне пришлось добавить строку 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);
?>
1 голос
/ 13 августа 2010

@ Sonny

ложное предположение: PNG любой битовой глубины может иметь прозрачность. Он записывается в фрагмент tRNS изображения png (за исключением полноцветных). Определение формата 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 альфа-канал), где «палитра» PNG записывает альфа-канал в своем собственном блоке.

Фейерверк очень хорош в этом.

Примеры:

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

0 голосов
/ 23 февраля 2010

Опираясь на решение dfilkovi, пытались ли вы использовать imagesavealpha () для сохранения полной информации альфа-канала?

0 голосов
/ 19 ноября 2009
<?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

0 голосов
/ 19 ноября 2009

Я думаю, что это может вам помочь.

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

...