PHP GDlib 8-Bit alfa ile PNG

5 Cevap php

nasıl bir png-8 olarak GD ile oluşturulan imajımı, kaydetmek mümkün mü?

iyi şeffaf kanalı ile gif olarak kaydeder - ama png-8 kullanmak istiyorum.

Best Regards, Beerweasle

5 Cevap

Imagesavealpha () ve şeffaf bir bg rengini kullanarak hile yapmak gerekir ...

Dfilkovi kodunun dayanarak:

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

@ Sonny

yanlış varsayım: herhangi bir bit derinliği PNG şeffaflık olabilir. Bu (truecolor olanlar hariç) png resmin TRNS yığın kaydedilir cf formatı tanımı

cf www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html # C.tRNS

idem www.w3.org/TR/PNG-Chunks.html # C.tRNS

Fark kaydedici nasıl: RGBA kendi öbekte PNG kayıtları alfa kanalı "paletted" 4 değerleri (3 renk ve 1 alfa kanalı), ile, piksel başına benzersiz bir kaydı var.

Fireworks ona çok iyi.

Örnekler:

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

Bu size yardımcı olabileceğini düşünüyorum.

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

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

Bu 8bit png yapmak gerekir

Dfilkovi çözümü Bina, sen tam alfa kanal bilgilerini kaydetmek için imagesavealpha() kullanarak denedi?