Grafik kann nicht angezeigt werden..

ropueh

Mitglied
... weil sie Fehler enthält.

Gibt es irgendeine Möglichkeit, herauszufinden, wo der Fehler ist?
Ich habe ein Skript für Thumbnails, was nach einem Serverupdate nicht mehr geht. Vorher lief noch alles einwandfrei. Ich stehe leider völlig auf dem Schlauch, da das Skript ursprünglich auch nicht von mir ist.

PHP:
<?php
class thumbnail
{
        var $img;
        var $fileInfo;
        var $fullName;
        var $newX;
        var $newY;
        var $quality;
        var $orgX;
        var $orgY;
        // $data - (voller) Dateiname oder String (z.B. aus Datenbank)
        function create($data)
        {
                $this->destroy();
                if (file_exists($data)) {
                        $this->img = @ImageCreateFromJpeg($data);
                        $this->fileInfo = basename($data);
                        $this->fullName = $data;
                } else {
                        $this->img = @ImageCreateFromString($data);
                }
                if (!$this->img) {
                        $this->destroy();
                        return false;
                } else {
                        $this->orgX = ImageSX($this->img);
                        $this->orgY = ImageSY($this->img);
                        return true;
                }
        }
        // Höhe des aktuellen Bildes im Container zurückgeben, false bei Fehler
        function height()
        {
                if ($this->img) {
                        return ImageSY($this->img);
                } else {
                        return false;
                }
        }
        // Breite des aktuellen Bildes im Container zurückgeben, false bei Fehler
        function width()
        {
                if ($this->img) {
                        return ImageSX($this->img);
                } else {
                        return false;
                }
        }
        // Qualität für Ausgabe setzen
        function setQuality($quality = false)
        {
                if ($this->img && $quality) {
                        $this->quality = $quality;
                } else {
                        return false;
                }
        }
        // Thumbnail erzeugen
        function resize($newX = false,$newY = false)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        $newX = $this->_convert($newX,$X);
                        $newY = $this->_convert($newY,$Y);
                        if (!$newX && !$newY) {
                                $newX = $X;
                                $newY = $Y;
                        }
                        if (!$newX) {
                                $newX = round($X / ($Y / $newY));
                        }
                        if (!$newY) {
                                $newY = round($Y / ( $X / $newX));
                        }
                        if ( ! $newimg = ImageCreateTruecolor($newX,$newY)) {
                                $newimg = ImageCreate($newX,$newY);
                        }
                        if ( ! ImageCopyResampled ($newimg, $this->img, 0, 0, 0, 0, $newX, $newY,$X,$Y)) {
                                ImageCopyResized ($newimg, $this->img, 0, 0, 0, 0, $newX, $newY,$X,$Y);
                        }
                        $this->img = $newimg;
                        return true;
                } else {
                        return false;
                }
        }
        // Schneidet ein Bild neu zu
        /* Werte für cut (X stellt das Ergebnis dar)
              $srcX
              +---+--------------+
        $srcY |   |              |
              +---+---+          |
              |   | X | $newY    | Ursprungsbild
              |   +---+          |
              |    $newX         |
              |                  |
              +------------------+
        */
        function cut($newX,$newY,$srcX = 0,$srcY = 0)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        $newX = $this->_convert($newX,$X);
                        $newY = $this->_convert($newY,$Y);
                        if (!$newX) {
                                $newX = $X;
                        }
                        if (!$newY) {
                                $newY = $Y;
                        }
                        if ( ! $newimg = ImageCreateTruecolor($X,$Y)) {
                                $newimg = ImageCreate($X,$Y);
                        }
                        ImageCopy ($newimg,$this->img,0, 0, 0, 0,$X,$Y);
                        ImageDestroy($this->img);
                        if ( ! $this->img = ImageCreateTruecolor($newX, $newY)) {
                                $this->img = ImageCreate($newX, $newY);
                        }
                        imagecopy ($this->img,$newimg, 0, 0,$srcX, $srcY, $newX, $newY);
                        ImageDestroy($newimg);
                        return true;
                } else {
                        return false;
                }
        }
        /* schneidet ein Teil mit Größe newX und newY an festgelegten Stellen des Bildes zu
        $pos = Position welches Teil verwendet werden soll
        +---+---+---+
        | 1 | 2 | 3 |
        +---+---+---+
        | 4 | 5 | 6 |
        +---+---+---+
        | 7 | 8 | 9 |
        +---+---+---+
        */
        function autocut($newX,$newY,$pos = 5)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        $newX = $this->_convert($newX,$X);
                        $newY = $this->_convert($newY,$Y);
                        if (!$newX) {
                                $newX = $X;
                        }
                        if (!$newY) {
                                $newY = $Y;
                        }
                        switch ($pos) {
                            case 1:
                                $srcX = 0;
                                $srcY = 0;
                        break;
                            case 2:
                                $srcX = round(($X / 2)-($newX/2));
                                $srcY = 0;
                        break;
                            case 3:
                                $srcX = ImageSX($this->img) - $newX;
                                $srcY = 0;
                        break;
                            case 4:
                                $srcX = 0;
                                $srcY = round(($Y / 2)-($newY/2));
                        break;
                            case 5:
                                $srcX = round(($X / 2)-($newX/2));
                                $srcY = round(($Y / 2)-($newY/2));
                        break;
                            case 6:
                                $srcX = $X-$newX;
                                $srcY = round(($Y / 2)-($newY/2));
                        break;
                            case 7:
                                $srcX = 0;
                                $srcY = $Y - $newY;
                        break;
                            case 8:
                                $srcX = round(($X / 2)-($newX/2));
                                $srcY = $Y-$newY;
                        break;
                            case 9:
                                $srcX = $X- $newX;
                                $srcY = $Y - $newY;
                        break;
                            default:
                                $srcX = round(($X / 2)-($newX/2));
                                $srcY = round(($Y / 2)-($newY/2));
                        }
                        return $this->cut($newX,$newY,$srcX,$srcY);
                } else {
                        return false;
                }
        }
        // erzeugt ein Quadrat des Bildes mit Kantenlänge von $size
        // ist das Bild nicht quadratisch kann mit $pos
        // der Bildausschnitt festgelegt werden, Werte siehe function autocut
        function cube($size,$pos = 5)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        if ($X > $Y)
                        {
                                $newX = false;
                                $newY = $size;
                        } elseif ($X < $Y) {
                                $newX = $size;
                                $newY = false;
                        } else {
                                $newX = $size;
                                $newY = $size;
                        }
                        if ($this->resize($newX,$newY)) {
                                return $this->autocut($size,$size,$pos);
                        } else {
                                return false;
                        }
                } else {
                        return false;
                }
        }
        // erzeugt ein Bild dessen größte Kantenlänge $size ist
        function maxSize($size)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        if ($X > $Y)
                        {
                                $newX = $size;
                                $newY = false;
                        } elseif ($X < $Y) {
                                $newX = false;
                                $newY = $size;
                        } else {
                                $newX = $size;
                                $newY = $size;
                        }
                        return $this->resize($newX,$newY);
                } else {
                        return false;
                }
        }
        // erzeugt ein Bild dessen kleinste Kantenlänge $size ist
        function minSize($size)
        {
                if ($this->img) {
                        $X = ImageSX($this->img);
                        $Y = ImageSY($this->img);
                        if ($X > $Y)
                        {
                                $newX = false;
                                $newY = $size;
                        } elseif ($X < $Y) {
                                $newX = $size;
                                $newY = false;
                        } else {
                                $newX = $size;
                                $newY = $size;
                        }
                        return $this->resize($newX,$newY);
                } else {
                        return false;
                }
        }
        // speichert das Bild als $fileName
        // wird $filename angegeben muss es ein voller Dateiname mit Pfad sein
        // ist $override wahr wird ein bestehendes Bild überschrieben, sonst nicht
        // Rückgabe:
        //              true wenn geschrieben (oder überschrieben)
        //              false on error
        //              0 wenn schon existiert (nur bei $override=false)
        function save($fileName, $override = true)
        {
                if ($this->img) {
                        if (!file_exists($fileName) || $override)  {
                                if (ImageJPEG($this->img,$fileName,$this->quality)) {
                                        return true;
                                } else {
                                        return false;
                                }
                        } else {
                                return 0;
                        }
                } else {
                        return false;
                }
        }
        // Gibt Bild an Browser aus (Ausgabe des Headers, Destroy aufrufen), beide optional
        function output($sendHeader = true,$destroy = true)
        {
                if ($this->img) {
                                if ($sendHeader) {
                                        header("Content-type: image/jpeg");
                                }
                                ImageJPEG($this->img,"",$this->quality);
                                if ($destroy) {
                                        $this->destroy();
                                }
                } else {
                        return false;
                }
        }
        // Setzt die Werte in der Klasse frei und löscht Bild
        function destroy()
        {
                if ($this->img) {
                        ImageDestroy($this->img);
                }
                $this->img = false;
                $this->fileInfo = false;
                $this->fullName = false;
                $this->newX = false;
                $this->newY = false;
                $this->quality = 70;
                $this->orgX = false;
                $this->orgY = false;
        }
        // rechnet prozentuale Angaben in Pixel um, erwartet
        // ist $value eine Prozentangabe z.B. (string) "50%" wird diese umgerechnet
        // $full muss als 100% in Pixel angegeben werden
        function _convert($value,$full = false)
        {
                if (strstr($value,"%")) {
                        $value = trim(str_replace ("%", "", $value));
                        $value = ($full / 100) * $value;
                }
                if ($value < 1 && $value !== false) {
                        $value = 1;
                }
                return $value;
        }
}

if ($_GET['src'] == "images/dummy.jpg") {
$src = "images/dummy.jpg";
}
else {
$src = "bilder/".$_GET['src'];
}
if($_GET['mod'] == "s")
{
        $thumbnail = new thumbnail();
        $thumbnail->create("$src");
        $thumbnail->setQuality(90);
        $thumbnail->resize(90);
        $thumbnail->autocut(60,60,5);
        $thumbnail->output();
}
elseif($_GET['mod'] == "m") {
        $thumbnail = new thumbnail();
        $thumbnail->create("$src");
        $thumbnail->setQuality(90);
        $thumbnail->resize(170);
        $thumbnail->autocut(105,105,5);
        $thumbnail->output();
}
elseif(empty($_GET['mod'])) {
        $thumbnail = new thumbnail();
        $thumbnail->create("$src");
        $thumbnail->setQuality(100);
        $thumbnail->minSize(250);
        $thumbnail->output();
}
elseif($_GET['mod'] == "xs") {
        $thumbnail = new thumbnail();
        $thumbnail->create("$src");
        $thumbnail->setQuality(90);
        $thumbnail->resize(35);
        $thumbnail->autocut(25,25,5);
        $thumbnail->output();
}
?>

Wäre cool, wenn mir jemand auch nur ein bisschen auf die Sprünge helfen könnte :)
Vielen Dank!
 
Du könntest an die Methode "output" mal als ersten Parameter "false" übergeben und somit ggf. Fehlermeldungen im Browser sehen. Wenn du keine sehen kannst, aktiviere mal die Fehleranzeige mit

PHP:
<?php
// Schreib mich an den Anfang des Scripts
error_reporting(-1);
ini_set('display_errors', 1);
 
Hi

bei welchen Parametern (src und mod) passiert das denn zum Beispiel?

Speichere so eine fehlerhafte Grafik im Browser einmal in eine Datei ab (Firefox, oder?)
und schau mit einem Hex-Editor, ob PHP-Warnungen etc. drin sind. Bzw. lad sie einfach hier
als Anhang rauf, falls du kein passendes Programm hast oder so , dann mach ich das

Sonstiges: Bevor man $_GET['src'] zB. so verwendet: $src = "bilder/".$_GET['src'];
sollte man vorsichtshalber prüfen, ob kein "../" in $_GET['src'] enthalten ist.
 
RewriteRule ^produktbilder\/(.*)-m.jpg?$ thumbnail.php?mod=m&src=$1.jpg [NC]

also aus blabla-m.jpg
wird src=blabla.jpg und mod=m

HTML:
<br />
<b>Warning</b>:  imagejpeg(): Filename cannot be empty in <b>/web/.../thumbnail.php</b> on line <b>362</b><br />

Line 362: ImageJPEG($this->img,"",$this->quality);
 
Zurück