martin
Well-Known Member
Hallo Forum
wie der Titel schon sagt, möchte ich gerne Transparenz in ein mit GD erstelltes Bild bekommen. Dabei habe ich etwas gegoogelt und bin auch einen kleinen Schritt weiter gekommen. Hier mal etwas Code:
In dem geposteten Code (Bild) wird eine kleine blaue Kugel angezeigt (25px), wo Transparenz funktioniert, genau so, wie ich das brauche. Bei der größeren blauen Kugel (50px), die über eine separate Funktion "detail1" erstellt- und dann kopiert wird, funktioniert das Ganze leider nicht mehr.
Das zu erstellende Bild ist ziemlich komplex und besteht aus vielen kleinen "Bauteilen", die alle samt in separaten Funktionen erstellt werden und dann an die entsprechenden Positionen kopiert werden mit imagecopy (so wie im Bsp. Code zu sehen). Aus diesem Grund kann ich nicht einfach die Lösung mit der kleinen blauen Kugel nehmen, sonder muss irgendwie die Transparenz mit in die Funktions bringen, nur will es mir nicht gelingen.
wie der Titel schon sagt, möchte ich gerne Transparenz in ein mit GD erstelltes Bild bekommen. Dabei habe ich etwas gegoogelt und bin auch einen kleinen Schritt weiter gekommen. Hier mal etwas Code:
PHP:
<?php
// Create a blank image to test with.
$gfx = imagecreatetruecolor(200, 200);
// Declare just two colors, a bright green, and blue
$blue = imagecolorallocate($gfx, 0, 0, 255);
$green = imagecolorallocate($gfx, 0, 255, 0);
$red = imagecolorallocate($gfx, 255, 0, 0);
$color = imagecolorallocate($gfx, 155, 155, 155);
// Make the entire background green
imagefilledrectangle($gfx, 0, 0, 199, 199, $green);
// Make two shapes
imagefilledrectangle($gfx, 0, 0, 199, 100, $color);
imagefilledrectangle($gfx, 100, 0, 199, 199, $red);
// Draw a blue circle on the image:
imagefilledellipse($gfx, 100, 100, 30, 30, $blue);
$tmp = detail1();
imagecopy($gfx,$tmp,75,25,0,0,imagesx($tmp),imagesy($tmp));
// Set the green color as transparent:
imagecolortransparent($gfx, $green);
function detail1(){
$test = imagecreatetruecolor(50, 50);
$blue = imagecolorallocate($test, 0, 0, 255);
$green = imagecolorallocate($test, 0, 255, 0);
imagefilledrectangle($test, 0, 0, 50, 50, $green);
imagefilledellipse($test, 25, 25, 50, 50, $blue);
imagecolortransparent($test,$green);
return $test;
}
// Output our sample as a PNG
header('Content-type: image/png');
imagepng($gfx);
?>
In dem geposteten Code (Bild) wird eine kleine blaue Kugel angezeigt (25px), wo Transparenz funktioniert, genau so, wie ich das brauche. Bei der größeren blauen Kugel (50px), die über eine separate Funktion "detail1" erstellt- und dann kopiert wird, funktioniert das Ganze leider nicht mehr.
Das zu erstellende Bild ist ziemlich komplex und besteht aus vielen kleinen "Bauteilen", die alle samt in separaten Funktionen erstellt werden und dann an die entsprechenden Positionen kopiert werden mit imagecopy (so wie im Bsp. Code zu sehen). Aus diesem Grund kann ich nicht einfach die Lösung mit der kleinen blauen Kugel nehmen, sonder muss irgendwie die Transparenz mit in die Funktions bringen, nur will es mir nicht gelingen.