PHP gdLib 8-битный PNG с альфа-каналом

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

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

С уважением, Beerweasle


person Beerweasle    schedule 19.11.2009    source источник


Ответы (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);
?>
person Treviño    schedule 24.02.2010

@Сынок

ложное предположение: 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

person eleg    schedule 13.08.2010

Думаю, это могло бы тебе помочь.

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

person dfilkovi    schedule 19.11.2009
comment
Не совсем. На самом деле это то, что я делаю с imagegif, но если я использую imagepng, это 24-битное изображение. - person Beerweasle; 19.11.2009
comment
Насколько я знаю, PNG с альфа-прозрачностью должны быть 24-битными. Для 8-битных PNG вы должны выбрать цвет из палитры, чтобы он был прозрачным. - person Sonny; 11.02.2010

<?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

person dfilkovi    schedule 19.11.2009
comment
Если я это сделаю, прозрачность исчезнет - person Beerweasle; 19.11.2009

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

person Alex Weber    schedule 23.02.2010