8
votes

Php gdlib 8 bits png avec alpha

Comment est-il possible d'enregistrer mon image, créée avec GD, en tant que PNG-8?

Il enregistre comme gif avec un canal transparent bien - mais je veux utiliser PNG-8.

meilleures salutations, Beerweasle


0 commentaires

6 Réponses :


0
votes

2 commentaires

Pas vraiment. C'est en fait ce que je fais avec imagegif - mais si j'utilise imagepng, c'est une image 24 bits


Afaik, pngs avec transparence alpha doit être 24 bits. Pour les PNG 8 bits, vous devez choisir une couleur de la palette pour être transparente.



0
votes
<?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);
?>
this should make 8bit png

1 commentaires

Si je fais cela, la transparence disparaît



0
votes

Bâtiment sur la solution de Dfilkovi, avez-vous essayé d'utiliser imagesAvealpha () pour enregistrer les informations complètes du canal alpha ?


0 commentaires

5
votes

Utilisation de ImagesAvealpha () Code> Et une couleur BG transparente doit faire le tour ...

Basé sur le code de Dfilkovi: P>

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


0 commentaires

1
votes

@sonny

Fausse hypothèse: PNG de toute profondeur de bit peut avoir une transparence. Il est enregistré dans la partie TRNS de l'image PNG (à l'exception de ceux Truecolor) Définition du format CF

cf www.libpng.org/pub/png/spec/1.2/png-chunks.html#c.trns

Idem www.w3.org/tr/png-chunks.html#c.trns

La différence est la manière dont il est enregistreur: RGBA dispose d'un enregistrement unique par pixel, avec 4 valeurs (3 couleurs et 1 canal alpha), où "Paleté" PNG enregistre Alpha canal dans son propre morceau.

Fireworks est très bon à cela.

Exemples:

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


0 commentaires

0
votes

Je devais ajouter la ligne ImageColorTransparent ($ im, $ alphabg); au code suivant (extrait de la réponse précédente) pour que cela fonctionne:
xxx


0 commentaires