Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
Letzte Einträge:
Mit PHP halbtransparente PNG Bil
in Home am 9 Juli 2012 um 15:43
LIDL Anubis Webcam 1,3 Megapixel
in Home am 16 Mai 2012 um 00:39
Impulse zählen über die Soundkar
in Home am 3 Februar 2012 um 18:12
Plasmalampe
in Home am 31 Januar 2012 um 15:33
Voltcraft TNG-30 Netzgerät
in Home am 16 Januar 2012 um 14:05
aktuelle Klowand
Anklicken um zu malen!
Chat
Die Katze im IRC besuchen
Monas Katzenklappe
ODL
Mit PHP halbtransparente PNG Bilder erzeugen
von Plapperkatze am 9.Juli 2012 um 15:43
Fangen wir relativ einfach an, mit einem Beispiel von http://de3.php.net/manual/de/function.imagecolorallocatealpha.php .Dort werden 3 kreise teiltransparent auf einen weißen Hintergrund gemalt. Wenn wir nun stattdessen einen transparenten Hintergrund wollen, kann man das so hinkriegen:
<?php
$size = 120;
$image=imagecreatetruecolor($size,$size);


imagealphablending($image,false);
$col=imagecolorallocatealpha($image,255,255,255,127);
imagefilledrectangle($image,0,0,$size,$size,$col);
imagealphablending($image,true);

$green_x = 50;
$green_y = 40;
$red_x    = 60;
$red_y    = 70;
$blue_x   = 80;
$blue_y   = 55;
$radius   = 75;

// allocate colors with alpha values
$red    = imagecolorallocatealpha($image, 255, 0, 0, 75);
$green = imagecolorallocatealpha($image, 0, 255, 0, 75);
$blue   = imagecolorallocatealpha($image, 0, 0, 255, 75);

// drawing 3 overlapped circle
imagefilledellipse($image, $green_x, $green_y, $radius, $radius, $green);
imagefilledellipse($image, $red_x, $red_y, $radius, $radius, $red);
imagefilledellipse($image, $blue_x, $blue_y, $radius, $radius, $blue);

// don't forget to output a correct header!
header('Content-Type: image/png');

// and finally, output the result
imagesavealpha ($image ,TRUE);
imagepng($image);
imagedestroy($image);
?>


Der wesentlichste Unterschied ist, dass wir mit
imagealphablending($image,false);
$col=imagecolorallocatealpha($image,255,255,255,127);
imagefilledrectangle($image,0,0,$size,$size,$col);
den Hintergrund des Bildes zuerst völlig transparent machen.

OK, let's go for something completely different:
Nun haben wir ein JPG-Bild und wollen einen QR-Code teiltransparent da reinsetzen:


<?php
$size = 128; // our intransparent qr code has 128x128px

$image=imagecreatefromjpeg("kira.jpg");

$image2=imagecreatefrompng("qr.png");

$col=imagecolorallocate($image2,255,255,255);
imagecolortransparent($image2,$col);

imagecopymerge($image,$image2,128,128,0,0,$size,$size,40);

imagedestroy($image2);

// don't forget to output a correct header!
header('Content-Type: image/png');

// and finally, output the result
imagesavealpha ($image ,true);
imagepng($image);
imagedestroy($image);
?>

Mit
$col=imagecolorallocate($image2,255,255,255);
imagecolortransparent($image2,$col);
machen wir das Weiß im QR-Code transparent, der rest wird dann mit imagecopymerge teiltransparent reinkopiert.


Nun nochmal was anderes:


<?php
$size = 256;
$image=imagecreatetruecolor($size,$size);

imagealphablending($image,false);
for($i=0;$i<256;$i++)
{
$r=(sin($i*3.15149265/(256*1.2)+2)+1)*127;
$g=(sin($i*2*3.15149265/(256*1.6)+4)+1)*127;
$b=(sin($i*3.15149265/(256*2)+6)+1)*127;
$col=imagecolorallocatealpha($image,$r,$g,$b,$i/2);
imageline($image,0,$i,$size,$i,$col);
}

$image2=imagecreatefrompng("qr.png");

$col=imagecolorallocate($image2,255,255,255);
imagecolortransparent($image2,$col);

imagecopymerge($image,$image2,128,128,0,0,$size,$size,10);

imagedestroy($image2);

// don't forget to output a correct header!
header('Content-Type: image/png');

// and finally, output the result
imagesavealpha ($image ,TRUE);
imagepng($image);
imagedestroy($image);
?>

Der Code mit sin() in der for-Schleife ist nur, um einen schönen Farbverlauf zu erzeugen, und um nebenbei das PNG von opaque nach transparent übergehen zu lassen.

Nun zuletzt so einen Transparenz-Übergang mit einem JPG-Bild. Da habe ich keine einfachere Möglichkeit gefunden, als Pixel für Pixel das Bild zu bearbeiten:
<?php
$size = 256;

$image2=imagecreatefromjpeg("kira.jpg");

$image=imagecreatetruecolor($size,$size);

imagealphablending($image,false);

for($x=0;$x<$size;$x++)
{
 for($y=0;$y<$size;$y++)
 {
   $rgb=imagecolorat($image2,$x,$y);
   $r = ($rgb >> 16) & 0xFF;
   $g = ($rgb >> 8) & 0xFF;
   $b = $rgb & 0xFF;
   $rgb=imagecolorallocatealpha($image,$r,$g,$b,$y/2);
   imagesetpixel($image,$x,$y,$rgb);
 }
}

imagedestroy($image2);

// don't forget to output a correct header!
header('Content-Type: image/png');

// and finally, output the result
imagesavealpha($image,true);
imagepng($image);
imagedestroy($image);
?>

Das Ergebnis sieht dann so aus (wie gesagt, das Karo-Muster ist nur der Hintergrund und gehört nicht zum Bild):


[0 Kommentare]

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 220707 Besucher seit dem 23.01.2012 Login