geen transparante achtergrond png plaatje
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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);
}
}
?>
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
Gewijzigd op 01/01/1970 01:00:00 door Tom Beuckelaere
png heeft bij sommige browsers geen achtergrond... daar voor heb je wel een java-script... maar dat word niet door iedereen ondersteund...
het gebeurt in opera
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
Ik had dit script, maar het werkt nog niet goed:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!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>
<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?
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
lukt niet echt :s
Een bug, dus ik kan het niet oplossen?
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 !
Perry Saarloos op 16/07/2010 09:52:53:
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 !
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 !
Lees de eerste regel eens.
Hij heeft al een transparant plaatje.
Ik vind imagick beter werken dan GD. Betere uitkomsten, en ondersteund meer.
Is ook nog eens classes.
Waarom zijn jullie een topic uit 2007 aan het bumpen?
Mark Coenen op 16/07/2010 10:00:31:
Waarom zijn jullie een topic uit 2007 aan het bumpen?
Omdat ik daar niet eens op lette (want ik vind dat tegenwoordig niet duidelijk staan), en iemand kan hetzelfde probleem hebben. Die kan dan ook baad hebben aan imagemagick.