Es gibt noch ein weiteres Problem mit der Erstellung von Bildern mit PHP. In meinem letzten Beitrag hatte ich bereits darüber gesprochen, das ich ein Overlay über ein Basisbild legen möchte. Das wurde auch gelöst.
Das Overlay ist kleiner als das Basisbild, also will ich ein Bild erstellen, welches so groß ist, wie das Basisbild und da hinein das Overlay kacheln. Damit erhalte ich ein Bild welches genauso groß ist, wie das Basisbild.
Nun kann ich das Overlay über das Basisbild legen, ohne das ein Bild von beiden skaliert werden muss.
Das klappt aber leider noch nicht so ganz.
Um nun den Fehler zu finden, bin ich das Zeile für Zeile durch gegangen und siehe da, die Funktion imagepng() macht einfach nichts. Kein Bild aber auch keine Fehlerausgabe.
Hier das Skript:
PHP-Code:
private function tileBackground($imageRes, $overlayRes) {
//imageRes ist bereits ein neues Leeres Bild in der richtigen Größe als Grundlage für das Overlay
//$overlayRes ist die imageRessource aus $overlayRes = imagecreatefrompng($overlayPath);
//erstellt wurde das so
/*
$new_image = imagecreate($baseImageWidth, $baseImageHeight);
imagealphablending($new_image, false); //blending Mode
imagesavealpha ($new_image, true);
*/
$imageWidth = imagesx($imageRes);
$imageHeight = imagesy($imageRes);
$overlayWidth = imagesx($overlayRes);
$overlayHeight = imagesy($overlayRes);
// kachel das kleine Overlaybild in das gesamte neue große Bild
for ($x = 0; $x < $imageWidth; $x += $overlayWidth) {
imagecopy($imageRes, $overlayRes, $x, $y, 0, 0, $overlayWidth, $overlayHeight);
for ($y = 0; $y < $imageHeight; $y += $overlayHeight) {
imagecopy($imageRes, $overlayRes, $x, $y, 0, 0, $overlayWidth, $overlayHeight);
}
}
$outputWidth = imagesx($imageRes);
$outputHeight = imagesy($imageRes);
$this -> debugGlue("/n in overlay finish | width: ".$outputWidth." /n height: ".$outputHeight, "WebEditorRandshop/extensions/upload/debugGlueNeu.txt");
// Speichere das Ergebnisbild
// imagejpeg($imageRes, $outputPath);
$overlayOutputPath = "WebEditorRandshop/extensions/upload/checkOverlay.png";
try {
imagepng($imageRes, $overlayOutputPath);
} catch (Exception $e) {
$temp = print_r( $e->getMessage(), true );
$this -> debugGlue("/n overlay finish error ".$temp, "WebEditorRandshop/extensions/upload/debugGlueNeu.txt");
}
//Rückgabe
return $imageRes;
}
Die Variablen für die Größen sind aber mit richtigen Werten gefüllt, die Pfade werden also richtig übergeben
PHP-Code:
if(imagepng($imageRes, $overlayOutputPath))
Selbst wenn meine Schleifen falsch wären und die Bilder überlappen oder sonstwas, müsste das Skript doch wenigstens ein leeres Bild erstellen.
Es passiert aber einfach nur gar nichts.
Die debugGlueNeu.txt mit der gleichen Pfadangabe wie die für $output wird aber erstellt (wenn die aus dem catch Block raus ist natürlich).
Schreibrechte sollten da also kein Problem sein.
Damit hätte ich aber die Möglichkeit eine Fehlermeldung in die Datei zu schreiben. Einfach echo ist nicht, das wird alles per Ajax aufgerufen. Es gibt keine Rückgabe für die Website nur Variablen für JS.
Die JS-Ausgabe will ich aber nicht umbauen, da müsste zu viel geändert werden.
Auf das Severlog kann ich da auch nicht zugreifen.
Wie kann ich mir jetzt eine Fehlermeldung in der Textdatei ausgeben lassen, was bei imagepng() falsch läuft?
Kommentar