Hendrik: imagecreatefromjpeg größenbeschränkt?

Hallo,

die Funktion imagecreatefromjpg hat anscheinend eine Größenbeschränkung. JPEGs mit der Auflösung 2048x1536 akzeptiert sie noch, bei 2560x1920 kommt nur noch "Müll" raus. Das ganze ist unabhängig von der Kompressionsstufe bzw. Dateigröße.

Hat jemand für diesen Spezialfall bereits eine Lösung gefunden?

  1. Moin!

    die Funktion imagecreatefromjpg hat anscheinend eine Größenbeschränkung. JPEGs mit der Auflösung 2048x1536 akzeptiert sie noch, bei 2560x1920 kommt nur noch "Müll" raus. Das ganze ist unabhängig von der Kompressionsstufe bzw. Dateigröße.

    PHP-Skripte haben eine maximale Speichernutzung. Es ist bei der Nutzung komprimierter Bildformate auch egal, wie stark die komprimiert sind, weil sie mit der gdlib unkomprimiert im Speicher abgelegt werden. Du kannst also Rechnen:

    Speicherbedarf in Byte = X-Auflösung * Y-Auflösung * 3

    Bei 2048*1536 Pixeln sind das glatte 9 Megabyte (genauer: Mebibyte)

    Bei 2560*1920 Pixeln sind es schon über 14 Megabyte.

    Da der Standard für PHP-Skriptspeichernutzung IIRC bei 12 Megabyte liegt, kannst du also das kleinere Bild laden, das größere nicht.

    Sorge für mehr Speicherzuweisung, oder sorge für kleinere Bilder. :)

    - Sven Rautenberg

    1. Da der Standard für PHP-Skriptspeichernutzung IIRC bei 12 Megabyte liegt, kannst du also das kleinere Bild laden, das größere nicht.
      Sorge für mehr Speicherzuweisung, oder sorge für kleinere Bilder. :)

      Laut der phpinfo meines Webspaces liegt die Speichergröße memory_limit bei 40M. Das dürfte ja wohl genug sein.

      Gibt es noch andere Konstanten, die hier eine Rolle spielen?

      1. Hallo.

        Gibt es noch andere Konstanten, die hier eine Rolle spielen?

        Zum Beispiel die Farbtiefe ("3"), die du aber wohl kaum beinflussen können wirst.
        MfG, at

        1. Hello,

          Naja, 40M über alles.

          Welche PHP-Version ist im Einsatz?
          Bie allen 4er-Versionen liegt noch redundante Datenhaltung für die superglobalen und die globalen Arrays vor. Um eine Grafik auszupacken, wird ein I/O-Buffer benötigt, ein "Arbeitsspeicher" eine Quelle (unausgepackte Datei) und ein Ziel (ausgepacktes Bild) sowie ein Ziel für die Umwandlung (das bearbeitete Bild).

          Je nachdem, ob Du http://de2.php.net/manual/en/function.memory-get-usage.php bereits zur Verfügung hast, kannst Du den Soeicherverbrauch (zur Not mittels error_log() ) verfolgen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Welche PHP-Version ist im Einsatz?

            Auf dem Webserver läuft Apache mit PHP 4.3.8.

            Je nachdem, ob Du http://de2.php.net/manual/en/function.memory-get-usage.php bereits zur Verfügung hast, kannst Du den Soeicherverbrauch (zur Not mittels error_log() ) verfolgen.

            die Ausgabe der Speicherallokation ergab eine Differenz von nur 200 Bytes bei einem Bild mit 2048x1536 vor und nach imagecreatefromjpeg(). Da kann ja wohl was nicht stimmen.

            1. Hello,

              die Ausgabe der Speicherallokation ergab eine Differenz von nur 200 Bytes bei einem Bild mit 2048x1536 vor und nach imagecreatefromjpeg(). Da kann ja wohl was nicht stimmen.

              Während der Ausführung der Funktion kannst Du das baer wahrschinlich gar nicht abfragen. Du müsstest nun aufgrund der geschilderten Bedarfe mal hochrechnen, was während der Funktionsnutzung noch passieren könnte.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau