Beste leden,

Ik creeër een plaatje met de gd library van php vanaf een bestaande png met transparante achtergrond, na het generen heeft het plaatje geen transparante achtergron meer maar een gekleurde achtergrond, hoe komt dit?

<?php
error_reporting(E_ALL + E_STRICT);
ini_set( "display_errors", 1);

class Generate {

private $button;

public function __construct($font,$size,$image,$color,$text,$align){

$this->constructImage($font,$size,$image,$color,$text,$align);
return $this->button;
}

private function constructImage($font,$size,$image,$color,$text,$align){

$button = imagecreatefrompng($image);
$boundingbox = imagettfbbox($size,0,$font,$text);
switch ($align) {
case "left":
$x = 20;
break;
case "center":
$x = (imagesx($button)-($boundingbox[2]))/2;
break;
case "right":
$x = imagesx($button) -($boundingbox[2])-10;
break;
default:
break;
}
$y = imagesy($button) - (imagesy($button)-$size)/2;
$col = imagecolorallocate($button,hexdec($color[1]).hexdec($color[2]),hexdec($color[3]).hexdec($color[4]),hexdec($color[5]).hexdec($color[6]));

imagettftext($button,$size,0,$x,$y,$col,$font,$text);
header("Content-type: image/png");
header('Content-Disposition: attachment; filename="button.png"');
readfile($this->button = imagepng($button));
imagedestroy($button);
}
}

?>

EDIT: Live Demo
png heeft bij sommige browsers geen achtergrond... daar voor heb je wel een java-script... maar dat word niet door iedereen ondersteund...
heb ik geprobeerd maar werken wil het niet, heeft niemand een voorbeeld hoe het wel lukt?
Ik zal even voor je kijken.
Jan Koehoorn schreef op 16.09.2007 21:20
Ik zal even voor je kijken.


Dank je Jan ;)
[edit]Zo te lezen werkt het niet vanwege in bug in GD[/edit]
Ik had dit script, maar het werkt nog niet goed:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>PNG experiment</title>
	
	<style type="text/css" media="screen">
	body {background: url(bg_bw.gif);}
	</style>
</head>

<body>
	<p><img src="test2.png" /></p>
	
	<?php
		$img = 'test2.png';
		$src = imagecreatefrompng ($img);
		list ($w, $h) = getimagesize ($img);
		$dst = imagecreatetruecolor ($w, $h);
		imagealphablending ($src, true);
		imagealphablending ($dst, true);
		imagecopymerge ($dst, $src, 0, 0, 0, 0, $w, $h, 100);
		
		for ($x = 0; $x < $w; $x++) {
			for ($y = 0; $y < $h; $y++) {
				
			}
		}
		
		imagepng ($dst, 'test3.png');
		imagedestroy ($src);
		imagedestroy ($dst);
	?>
	
	<p><img src="test3.png" /></p>
</body>
</html>

Er gaat iets fout bij het handlen van de transparantie. Misschien dat je eerst die PNG als bestand kunt kopiëren en dan van die kopie met imagecreatefrompgn aan de gang?
Een bug, dus ik kan het niet oplossen?
Ik weet dat wel !

Als je een programma net als PSP heb kun je png opslaan, met alfa transpiratie hier door word heel het plaatje doorzichtig ;)Althans aleen de witte achtergrond waarom het ging ... Heb het zelf uit gevonden als je zo'n plaatje doorichtig wil kan ik het voor je doen schild je een hoop werk...

Laat het me maar weten !

Reageren