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:
Ok, während ich den Thread geschrieben habe, bin ich auf die Lösung gekommen...
Live Beispiel Nr.3
Das muss noch auf das gedrehte PNG angewendet werden, dann ist mein Hauptproblem gelöst.
Also:
Bevor ich den Thread wieder lösche, dachte ich ich helfe vielleicht noch jemanden.
Sry dafür
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:
erziele ich genau das Ergebnis, das ich haben will.
Live Beispiel Nr.3
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);
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
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);
Live Beispiel Nr.3
Zuletzt bearbeitet: