GDLib + imagerotate + Tranzparenz

Chumper

Erfahrenes Mitglied
Hallo Leute, nun habe ich ein Problem:

Für meinen BLog erstelle ich jeden Tag einmalig ein Bild , dass aus einem Zufallsbild, dem Datum, einem Polaroid besteht und um 15 Grad gedreht werden soll.

Das Polaroid, dass den Rahmen bildet ist ein PNG und sieht so aus:
Polaroid

Nun wird aus meiner Galerie ein Zufallsbild ausgewählt, auf 180 x 180 verkleinert und passgenau in das Polaroid eingefügt.

Nun berechne ich das Datum und trage das unten im Polaroid ein.
Im Moment ist es das Datum + Uhrzeit, damit ihr seht, dass es dynamisch ist ;)
Live Beispiel

Anschließend soll das ganze um 15 Grad gedreht werden, allerdings geht bei dieser Drehbewegung die komplette Transparenz des Pngs verloren.
Live Beispiel Nr.2


Dabei ist es egal ob ich den 4 Parameter von imagerotate auf true, false, 0 oder 1 setze.

Und bevor ich nun Imagemagick bemühe, würde ich gerne wissen, ob es eine Lösung gibt.
Zumal PHP ja ab Version 5 Transparente PNG-Rotationen unterstützen sollte.

Kurz zur Info:

PHP Version: 5.2.4
GD Version : bundled (2.0.34 compatible)

Von daher sollte es ja keine Probleme geben.

Quellcode:
PHP:
$days = date('d.m.Y H:i:s');
	
	
$bilder = glob(XXX); //----------- Pfad entfernt, Bilder sind aber vorhanden
	shuffle($bilder);
	
	
	$srcimage = imagecreatefromjpeg($bilder[0]);
	imageAlphaBlending($srcimage, true);
	imageSaveAlpha($srcimage, true);
	
	$image_o = getimagesize($bilder[0]);
	
	$max = 175;
	
	if ($image_o[0] > $max OR $image_o[1] > $max)
	{
		$width 	= $max / $image_o[0];
		$height = $max / $image_o[1];
		
		if ($width < $height)
		{
			$width 	= $height * $image_o[0];
			$height = $max;
		} else
		{
			$height	= $width * $image_o[1];
			$width = $max;
		}
		
		$height = round($height);
		$width = round($width);
	}
	
	$image = imagecreatetruecolor ( $max, $max );
	imagecopyresampled ( $image, $srcimage, 0, 0, ($width-$max)/2, ($height-$max)/2, 180, 180, $image_o[0], $image_o[1] );
	
	$polaroid = imagecreatefrompng('wp-content/themes/Blue Days/images/Polaroid-1.png');
	imageAlphaBlending($polaroid, true);
	imageSaveAlpha($polaroid, true);
	
	imagecopymerge ( $polaroid, $image, 68, 53, 0, 0, $max, $max, 100 );
	
	//PNG drehehn
	$font = 'wp-content/themes/Blue Days/images/fontz/Handf';
	imagefttext($polaroid, 12, 0, 70, 250, $black, $font, $days);	
	
	
       //Bis hierhin klappt alles
	
	$polaroid = imagerotate($polaroid,-15,100,0);
	//100 Damit, dass ihr seht was falsch läuft	
	//$polaroid = imagerotate($polaroid,-15,99,1);
	//$polaroid = imagerotate($polaroid,-15,99,true);
	//$polaroid = imagerotate($polaroid,-15,99,false);
       //Alles das gleiche Ergebnis
	

	header('Content-type: image/png');
	ImagePng($polaroid);
	//header('Content-type: image/jpeg');
	//Imagejpeg($image);
	imagedestroy($image);
	imagedestroy($polaroid);
	imagedestroy($srcimage);

Ok, während ich den Thread geschrieben habe, bin ich auf die Lösung gekommen...
Live Beispiel Nr.3
PHP:
//imageAlphaBlending($polaroid, true);
	//imageSaveAlpha($polaroid, true);
Das muss noch auf das gedrehte PNG angewendet werden, dann ist mein Hauptproblem gelöst.
Also:
PHP:
$bilder = glob(XXX); //-----------
	shuffle($bilder);
	
	
	$srcimage = imagecreatefromjpeg($bilder[0]);
	imageAlphaBlending($srcimage, true);
	imageSaveAlpha($srcimage, true);
	
	$image_o = getimagesize($bilder[0]);
	
	//Neue Breite etc berechnen
	//0 ist breite 
	//1 ist höhe
	$max = 175;
	
	if ($image_o[0] > $max OR $image_o[1] > $max)
	{
		$width 	= $max / $image_o[0];
		$height = $max / $image_o[1];
		
		if ($width < $height)
		{
			$width 	= $height * $image_o[0];
			$height = $max;
		} else
		{
			$height	= $width * $image_o[1];
			$width = $max;
		}
		
		$height = round($height);
		$width = round($width);
	}
	
	$image = imagecreatetruecolor ( $max, $max );
	imagecopyresampled ( $image, $srcimage, 0, 0, ($width-$max)/2, ($height-$max)/2, 180, 180, $image_o[0], $image_o[1] );
	
	//drehen
	$polaroid = imagecreatefrompng('wp-content/themes/Blue Days/images/Polaroid-1.png');
	imageAlphaBlending($polaroid, true);
	imageSaveAlpha($polaroid, true);
	
	imagecopymerge ( $polaroid, $image, 68, 53, 0, 0, $max, $max, 100 );
	
	//PNG drehehn
	$font = 'wp-content/themes/Blue Days/images/fontz/Handf';
	imagefttext($polaroid, 12, 0, 70, 250, $black, $font, $days);	
	
	
	
	$polaroid = imagerotate($polaroid,-15,99,true);
	imageAlphaBlending($polaroid, true);
	imageSaveAlpha($polaroid, true);
	
	
	header('Content-type: image/png');
	ImagePng($polaroid);
	//header('Content-type: image/jpeg');
	//Imagejpeg($image);
	imagedestroy($image);
	imagedestroy($polaroid);
	imagedestroy($srcimage);

Bevor ich den Thread wieder lösche, dachte ich ich helfe vielleicht noch jemanden.
Sry dafür :D

Nun muss ich nur noch den anderen Background transparent machen.

€dit: Oh man... Gerade noch ein Thread hier im Forum gefunden, der genau die Lösung hat... und ich dachte ich hätte gesucht...
Schande über mich...

€dit2: Um das Thema nun ganz abzuschließen:
Wenn ich diesen Befehl nehme:
PHP:
imagerotate($polaroid,-15,-1);
erziele ich genau das Ergebnis, das ich haben will.

Live Beispiel Nr.3
 
Zuletzt bearbeitet:
Zurück