Transparens i PNG TrueColor-billede
Jeg har et program der eksporterer et PNG-billede, hvor jeg ønsker at alt det hvide skal være transparent. Desværre håndterer det pågældende program ikke transparens, så det skal løses via PHP.På PHP.net har jeg set at det (absolut) kun er den sorte farve der kan gøres transparent i TrueColor, hvorfor jeg først har rettet i pixelfarverne så rgb(0,0,0) => rgb(1,1,1) og derefter rgb(255,255,255) => rgb(0,0,0). Og det virker umiddelbart fint. Men jeg kan ikke få den sorte til at blive transparent ! :-(
De eksisterende eksempler på PHP.net og her på Eksperten går alle på at lægge et transparent lag ovenpå et ikke-transparent lag, men jeg vil have transparens i alle lag, så billedet kan lægges ovenpå andre billeder.
Min PHP-kode:
// load image
$imgsrc = imagecreatefrompng($pathname);
// define colors
$white = imagecolorallocate($imgsrc,255,255,255);
$gray = imagecolorallocate($imgsrc, 1, 1, 1);
$black = imagecolorallocate($imgsrc, 0, 0, 0);
// width&height
$img_w = imagesx($imgsrc);
$img_h = imagesy($imgsrc);
// black => almost black
for($x=0; $x<$img_w; $x++)
for ($y=0; $y<$img_h; $y++)
if (imagecolorat($imgsrc,$x,$y) == $black)
imagefill($imgsrc,$x,$y,$gray);
// white => true black
for($x=0; $x<$img_w; $x++)
for ($y=0; $y<$img_h; $y++)
if (imagecolorat($imgsrc,$x,$y) == $white)
imagefill($imgsrc,$x,$y,$black);
// make true black transparent
imagecolortransparent($imgsrc,$black);
// re-save to disk & clean-up
imagepng($imgsrc,$pathname);
imagedestroy($imgsrc);
Jeg ved jeg skal anvende GD/2 (php_gd2), og har prøvet dette med både PHP 4.2.3 og 4.3.1, uden held. Problemet skal alt-andet-lige løses i PHP 4.2.3, og det SKAL løses ift. TrueColor. Og så kører jeg det altså på Win2K hvis det har nogen relevans. ;-)
Et eksempel på det billede jeg får ud findes her:
http://gis.hvm.dk/transparens/output.png
Det tilsvarende oprindelige billede findes her:
http://gis.hvm.dk/transparens/input.png
