GD + imagerotate : Transparenz mitdrehen

maexle1894

Mitglied
Hi Leute,
in PHP > 5 erlaubt es die Funktion imagerotate nun endlich, transparente PNG-Images zu drehen, ohne das die Transparenz verloren geht. Dummerweise klappt es bei mir nicht mehr, irgendwo steckt da der Wurm drin :

PHP:
$new_door = imagecreatetruecolor($_POST[breite],$_POST[breite]);
imagealphablending($new_door, false);
imagesavealpha($new_door,true);
imagecopyresampled($new_door,imagecreatefrompng($vorlage),0,0,0,0,$_POST[breite],$_POST[breite],200,200);
$new_door = imagerotate($new_door,$rot,-1);
imagepng($new_door,$GLOBALS[DIR_RELATIVE]."/images/doors/".$doorname);

Es handelt sich hier um eine quadratische Textur einer Tür, die z.T. transparent und z.T semi-transparent ist. Ohne das Rotieren bleiben beide Transparenzen erhalten (also copyresampled geht anscheinend).

Kann mir jemand weiterhelfen?
 
Bei einem Winkel bis zu 45° der Drehung, funktioniert die Transparenz wunderbar, geht man allerdings über diese 45° klappt gar nichts mehr :/

irgendwelche ideen?
Habe zum testen folgenden Script benutzt:
PHP:
<?PHP
// File and rotation
$filename = 'gummibaer.png';
$degrees = rand(0,360) ;

// Content type
header('Content-type: image/png');

// Load
$source = imagecreatefrompng($filename);

// Rotate
$rotate = imagerotate($source, $degrees, -1);

// Output
imagepng($rotate);

?>

Setzt man für die random-Funktion nun rand(0,45) ein, dreht er die Bilder schön zuverlässig zufällig um bis zu 45°. Bei höheren Werten wird das Bild dann untransparent "gemacht".
warum nur bis 45°?


hab grad was gefunden:

http://bugs.php.net/bug.php?id=32921&edit=1

edit:
Okay hab mir ne lösung überlegt , is ein kleines Workarround:
PHP:
	        $randAngle = rand(0,45) ;
		$randTimes = rand(0,3) ;
		//$iTke = Source-Bild
		
	// Bild drehen
	if ($randTimes = 1){
		$iTmp = imagerotate($iTke,$randAngle,-1) ;
		}
	if ($randTimes = 2){
		$iTmp1 = imagerotate($iTke,$randAngle,-1) ;
		$iTmp = imagerotate($iTmp1,$randAngle, -1);
		}
	if ($randTimes = 3){
		$iTmp2 = imagerotate($iTke,$randAngle,-1) ;
		$iTmp3 = imagerotate($iTmp2,$randAngle, -1);
		$iTmp = imagerotate($iTmp3,$randAngle, -1);
		}

anstelle das bild direkt um z.b. 180 grad zu drehen, dreht man es einfach 4x um 45 grad
hab das oben jetzt nur mit 3x gemacht, aber sollte klar sein wies geht ;)

gruß


nochnEdit: könnte man eventuell effektiver mit ner For-Schleife oder sowas machen, aber bin grad zufaul zum überlegen ^^

und noch was, die Qualität der bilder leidet SEHR darunter :( also doch keine lösung, sry
 
Zuletzt bearbeitet:
Das ist echt lustig...

Das ist mir auch schon aufgefallen, dass es manches mal geht und machmal garnicht. An was das liegt kann ich mir absolut nicht vorstellen...

Mal abwarten, vielleicht hat jemand eine Lösung...
 
Zurück