Sehr große Bilder bearbeiten / suche workaround für: tried to allocate 12288 bytes

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sehr große Bilder bearbeiten / suche workaround für: tried to allocate 12288 bytes

    Hallo zusammen,

    ich versuche, Thumbs zu erzeugen von beliebig großen JPEGS (z.B. 6 MB groß). Dabei erscheint untenstehende Fehlermeldung. Gibt es denn keinen Workaround hierfür?

    Allowed memory size of 8388608 bytes exhausted (tried to allocate 12288 bytes)

    Ich kann/darf nicht in der PHP.INI den Wert für den Speicher erhöhen.

    Meine Ideen gehen so in folgende Richtung: Bild (bzw. Datei) zerteilen und Thumbs separat erzeugen, dann wieder zusammenfügen. Leider komme ich mit den php Grafik-Funktionen garnicht ran, da ja schon beim Einlesen des Bildes das Skript über das Speicher-Limit kommt.

    Hat jemand eine Lösung / Idee ?

    Danke

  • #2
    Schon mal versucht das mit Shellbefehlen zu machen?

    Kommentar


    • #3
      Danke für die Antwort, aber meine Seite wird 'ganz normal', so wie bei schätzungsweise den meisten Leuten hier, über shared hosting ausgeliefert. Da ist leider nicht viel mit shell...

      Ich versuche ein script zu schreiben, welches in Standard-php-Umgebungen läuft. Es soll halt einfach auch mit großen Bildern funktionieren. Das Problem müssten doch andere auch schon gehabt (und gelöst) haben...

      Mein Gedanke ist:

      - 'imagecreatefromjpeg' etc. fällt weg, weil resultierende Variable zu groß

      - wie wäre es also, sozusagen häppchenweise Binärdaten auszulesen (mit 'fread' etc), um dann das thumb Stück für Stück entstehen zu lassen...? Antwort: Leider gibt es dann für mich ziemliche Probleme mit der richtigen Interpretation der Binärdatenstruktur des jpeg-files...

      - Gibt es noch eine Idee?

      Kommentar


      • #4
        Mmhhh, JPEGs häppchenweise zu parsen kannst Du glaube ich vergessen - ist schließlich ein sehr komplexes Kompressionsformat, bei dem eben nicht ein Pixel neben dem nächsten steht.
        Ich befürchte, da mußt Du mit dem Provider reden - entweder Du brauchst eine Erhöhung des Memory-Limits, oder er stellt Dir via shell aufrufbare Tools wie imagemagick zur Verfügung.

        Kommentar


        • #5
          Wie wärs aber, das jpeg file zwar getrennt zu parsen, aber dann am Server wieder zusammenzufügen bevor der Thumb erstellt wird?
          Sprich: Jpeg binär auslesen, die erste Hälfte in eine Datei, die zweite in eine andere...
          Die Teile dann hochladen und am Server wieder zu einer Datei zusammenfügen. Daraus dann den Thumb erstellen.

          Das sollte eigentlich kein Problem darstellen, ist allerdings ein bissl aufwändig bzw. umständlich.

          lG, Bernie

          Kommentar


          • #6
            Original geschrieben von deltacon
            Das sollte eigentlich kein Problem darstellen
            oh doch, davon würde ich definitiv ausgehen.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Original geschrieben von deltacon
              Das sollte eigentlich kein Problem darstellen, ist allerdings ein bissl aufwändig bzw. umständlich.
              Oooh doch. Falls das überhaupt klappt, kriegst Du an der Nahtstelle massive Bildfehler. Hier findest Du raus, warum: http://en.wikipedia.org/wiki/JPEG#Encoding

              Kommentar


              • #8
                Vielleicht hilft das

                Ich hab das ganze gerade so "gelöst", dass ich einfach bei einer bestimmten Pixelzahl dicht macht - nämlich da, wo der Webserver anfängt, Probleme zu bekommen (in meinem Fall 3 Megapixel).
                PHP-Code:
                $n_maxpixels 3*1024*1024// 3M
                list($n_width$n_height$s_typ)
                  = 
                getimagesize($_FILES['bild']['tmp_name']);
                if (
                $n_width*$n_height>$n_maxpixels)
                  echo 
                "maximal 3 Megapixel!";
                else {
                  ... 
                resize ...

                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Hallo,

                  Der Tip (oder Tipp) mit der Shell scheint doch recht praktikabel zu sein. Ich kannte den exec-Befehl bislang nicht. Bin zwar noch nicht ganz am Ziel, aber der Weg scheint ungefähr so zu sein:

                  ImageMagick ansprechen und JPEG ausserhalb von PHP kleinrechnen:

                  Pseudo-Code:
                  exec ( convert -resize "100x100" source dest)

                  Auch möglich:


                  PHP_frontend_to_ImageMagick

                  Gruß mit Hut

                  Kommentar

                  Lädt...
                  X