Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] ImageCreateFromJPEG Alternative?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] ImageCreateFromJPEG Alternative?

    Hi Leute,

    ich habe jetzt wirklich lange gegoogelt und das Forum hier durchsucht.. leider ohne Lösung des Problems.

    ImageCreateFromJPEG überschreitet, wie bei so oft beschrieben, das Memory-Limit.
    Mir ist auch klar, woher das Problem kommt (Riesige Speichermenge, da das Bild intern als BMP umgerechnet wird). Nur finde ich leider nirgends eine Lösung. Ist es effektiv einfach nicht möglich mit GD Thumbnails von hochaufgelösten Fotos zu erstellen? Memory_Limit etc. habe ich per php.ini angepasst, aber die Seite liegt leider bei Strato mit nem normalen PowerPlus Paket, da bekommt der einzelne User nicht allzuviel ab =)

    ImageMagick wäre eine Lösung.. steht mir auf dem dämlichen Server aber nicht zu Verfügung :\ Würde monatlich 8€ mehr kosten, das ist es nicht wert...

    Hat vielleicht irgendwer ne Idee wie man mit "Standardmitteln" Thumbnails von Fotos jenseits der 5MP-Grenze erstellt?

    Bin für jede Hilfe dankbar,
    LG, Nico

    PS: Skript bricht bereits beim 1. Bild ab, liegt also nicht an "alten" Bildern im Speicher


  • #2
    Hallo,

    mit PHP wirst du da wohl wirklich nicht weit kommen: SELFHTML Forumsarchiv / 2006 / November / Probleme beim Verkleinern von Bildern

    Gruß
    http://hallophp.de

    Kommentar


    • #3
      Zitat von Hankman Beitrag anzeigen
      ...
      ImageCreateFromJPEG überschreitet, wie bei so oft beschrieben, das Memory-Limit.
      Mir ist auch klar, woher das Problem kommt (Riesige Speichermenge, da das Bild intern als BMP umgerechnet wird). Nur finde ich leider nirgends eine Lösung.
      Die zwei Klassiker sind:

      1. Erhöhe das Memory-Limit in der php.ini.

      2. Berechne den ungefähren Speicherplatzverbrauch vor dem Aufruf von imageCreateFromJpeg() und brich selbst ab, wenn er das erlaubte Limit überschreitet. Diverse Ansätze dazu findest du in den Benutzerkommentaren zu den imageCreateFrom...()-Funktionen im PHP-Handbuch. Leider ist die Berechnung nur eine Schätzung, weil PHP das Memory-Management der LibGD übernimmt. Letzteres lässt sich genau berechnen, das von PHP nicht.

      Wahlweise könntest du noch darauf hoffen, dass der unsinnige Script-Abbruch endlich aus dem PHP-Quellcode der entsprechenden Funktionen entfernt wird und bei nicht ausreichendem Speicher einfach ein Fehlercode (bspw. das allseits beliebte FALSE) zurückgegeben wird.

      Ist es effektiv einfach nicht möglich mit GD Thumbnails von hochaufgelösten Fotos zu erstellen?
      Es gibt eine Möglichkeit, die dürfte ziemlich oft auch ohne LibGD funktioneren. Leider nicht ganz einfach zu realisieren und klappt nicht bei allen JPEG-Dateien.

      Rein theoretisch könnte man sogar aus sehr großen JPEG-Dateien Thumbnails bauen, indem man die Grafik stückweise verkleinert, ich habe aber noch niemanden gefunden, der mich dafür bezahlt, das mal in PHP umzusetzen. Ohne entsprechenden Antrieb setze ich mich aber nicht hin und studiere die libJPEG-7-Quellcodes ...

      Memory_Limit etc. habe ich per php.ini angepasst, aber die Seite liegt leider bei Strato mit nem normalen PowerPlus Paket, da bekommt der einzelne User nicht allzuviel ab =)
      Geiz ist geil ...
      Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

      Kommentar


      • #4
        Irgendwo ist immer eine Grenze. Der nächste will aus nem Frame einer 200MB Videodatei ein Thumbnail generieren. Man darf sich auch fragen, ob heutiger Umgang mit Ressourcen sinnvoll ist, nur weil schnelle Upstreams und Megapixelauflösungen state of the art sind. Ich bekomme jedenfalls jedesmal die Krise, wenn mein Arbeitgeber mir eine 30MB Worddatei mit irgendwelchen Bildern drin per E-Mail schickt.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Irgendwo ist immer eine Grenze. Der nächste will aus nem Frame einer 200MB Videodatei ein Thumbnail generieren. ...
          Das sollte auch mit PHP kein unlösbares Problem darstellen. Etwas Ähnliches hab ich vor einiger Zeit mal als Proof-of-Concept für MP4-Videos gebastelt. Das war nicht so "unperformant", wie viele vermuten würden.

          Man muss nur die Frame-"Bilddaten" in einem dekodierbaren Format vorliegen haben, also alles was die libGD frisst oder eben die unkomprimierten Pixeldaten (die kann man relativ leicht ins GD-Format wandeln).
          Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

          Kommentar


          • #6
            Zitat von fireweasel Beitrag anzeigen
            Die zwei Klassiker sind:
            1. Erhöhe das Memory-Limit in der php.ini.
            2. Berechne den ungefähren Speicherplatzverbrauch[...]
            1. ist ja bereits (im Möglichen Rahmen) geschehen. 2. Löst würde ja nur verhindern, dass das Skript abbricht.

            Ich bin auch kein Freund von riesigen Bildern, etc.
            Aber leider muss ich mich ja dem User beugen - und der will natürlich gerne seine Fotos von der Digicam bequem hochladen :\

            Der Ansatz das Bild in kleinere Bilder zu unterteilen hört sich vielversprechend an, aber ich glaube das übersteigt meine Kenntnisse - und es hört sich nicht so an, als hätte fireweasel da schon was passendes gefunden.

            Ich habe sogar schon nach Flashprogrammen gesucht, die die Berechnung einfach Clientseitig durchführen, die Bilder aber auf dem Server speichern... aber leider auch nichts gefunden.

            Mich wundert, dass man nirgends eine praktikable Lösung findet - das Problem dürfen doch wirklich viele haben, eben weil die Auflösungen immer größer werden.

            LG, Nico

            Kommentar


            • #7
              Was spricht denn dagegen, die Bilder vor dem Upload zu verkleinern?
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Auch ich bedanke mich für die Antworten. Ist interesant zu wissen, wie gd arbeitet..

                Ne Frage: Da ich aus der Grafik komme, arbeite ich gern mit Photoshop. Natürlich ist mir klar, dass es nicht nativ auf Linux läuft... Eine alte 5er Lizenz kostet ca. 50€. Und man kann Photoshop (After Efects ebenfalls) super gut per Shell ansteuern. Zudem haben beide Programme eine eigentlich sehr gute Scripting Schnittstelle (JScript und VB), womit man weit mehr machen kann, als Bilder skalieren. Ich habe 1 Jahr lang, 3 mal am Tag, After Effects auf diesem Wege Wettervideos für einen Sender produzieren lassen. Der Inhalt kam dynamisch von PHP. Kein Absturz...

                Denkt ihr, dass Photoshop für massenumwandlungen eventuell besser geeignet wär als "gd"? Oder würde man die gleichen Speicherprobleme haben?

                Kommentar


                • #9
                  Zitat von halskrause Beitrag anzeigen
                  Auch ich bedanke mich für die Antworten. Ist interesant zu wissen, wie gd arbeitet..
                  Nein, nicht GD -- PHP ist der limitierende Faktor. Die LibGD-Wrapper in anderen Script-Sprachen (wie bspw. Lua) haben diese Einschränkungen nicht.

                  Denkt ihr, dass Photoshop für massenumwandlungen eventuell besser geeignet wär als "gd"? Oder würde man die gleichen Speicherprobleme haben?
                  Da Photoshop als externe Anwendung läuft, kann das Memory-Limit von PHP dem nichts anhaben. Ob es für Massenumwandlungen geeignet ist, entzieht sich meiner Kenntnis.

                  Zitat von Hankman
                  Der Ansatz das Bild in kleinere Bilder zu unterteilen hört sich vielversprechend an, aber ich glaube das übersteigt meine Kenntnisse - und es hört sich nicht so an, als hätte fireweasel da schon was passendes gefunden.
                  Nein, das ist nur eine Idee, die ich beim Herumspielen mit den JPEG-Sources hatte (Das Stichwort ist "losless cropping"). Wie man das konkret in PHP machen kann, müsste ich erst noch ausprobieren. Leider habe ich derzeit genügend andere Freizeitbeschäftigungen.
                  Wenn man die Wurst schräg anschneidet, hält sie länger, weil die Scheiben größer sind.

                  Kommentar


                  • #10
                    Vermutlich wäre Photoshop "besser" geeignet, schließlich ist es das Grafikprogramm, daher wären die Ergebnisse wahrscheinlich auch besser. Wie's vom Speicher aussieht weiß ich natürlich nicht, keine Ahnung was PS intern mit dem Bildern macht.

                    Die Bilder vor dem Upload verkleinern ist natürlich auch möglich, gibt auch zig Freeware-Programme die das ohne weiteres erledigen, hab ich auch schon nach geschaut

                    Das Problem ist nur: Der Anwender ist mit dem Computer nur sehr Oberflächlich vertraut. Habe ihm eine Seite gebastelt, auf der er selbst Seiten erstellen kann, mit nem AJAX WYSISYG-Editor (CKedit, wirklich gut!) seine Seiten basteln kann, dazu halt noch Bilder hochladen kann (Geht um ne Präsentation von Kraftsporterfolgen, er selbst ist Trainer).

                    Idee war halt: Er lädt eine Reihe von Bildern in ein Temporäres Verzeichnis auf der HP, dies wird per PHP ausgelesen, die Bilder verkleinert, umbenannt und mit Beschreib, etc. inner DB gespeichert. Nur leider scheitert es nun anscheinend an der Sache mit dem Verkleinern.

                    Werde morgen bei Strato anrufen, vielleicht schalten Sie ja gegen einen kleinen Aufpreis ImageMagick frei... aber irgendwie glaub ich da nicht recht dran

                    Also bleiben nur die beiden Möglichkeiten entweder das Paket zu vergrößern (bzw. den Anbieter zu wechseln) oder die Bilder vorher zu verkleinern?
                    Suche nebenher noch nach anderen Workarounds.. leider recht erfolglos, solange man nix eigenes auf dem Server installieren kann... :\

                    Zitat von fireweasel Beitrag anzeigen
                    Leider habe ich derzeit genügend andere Freizeitbeschäftigungen.
                    Ja, ist ja ganz klar =) Das ist ganz sicher auch ein größeres Projekt *g*

                    Kommentar


                    • #11
                      Ich kann zwar kein Flash, aber wenn ich dieses Problem hätte, würde ich mir jemanden Suchen, der mir sowas in Flash schreint schreibt.
                      ...Oder: Free Client side image resize - flash cs4 - action script 3 filerefernce.data | Ady Levy
                      Du kriegst sogar ne "rotafunktion" dazu. Wofür auch immer...

                      Kommentar


                      • #12
                        @halskrause: WO HAST DU DAS DENN HER???
                        Google jetzt Ewigkeiten, leider erfolglos =) Wohl die falschen Suchbegriffe verwendet
                        DANKE!

                        Das Ding sollte eigentlich all meine Probleme lösen - die Bilder werden einfach vor dem Upload verkleinert, bei nem Bild mit der Breite 900 ein Thumbnail hat bisher keine Probleme gegeben =)

                        Meld mich nochmal obs funktioniert hat!

                        LG, Nico

                        Kommentar


                        • #13
                          So... Thema erledigt.

                          Falls es mal irgendjemandem weiter hilft:

                          Benutzt habe ich Version 2.1/ des Client Side Resize Skripts von adylevy.com.
                          Hier muss leider die swf-Datei komplett neu kompiliert werden, sollte eine andere als die voreingestellte Bildgröße benötigt werden. (Bildgröße muss dazu in main.as und pane/imageStrip.as geändert werden)

                          In Version 2.5 ist dies über eine XML-Datei möglich, leider habe ich diese Version nicht ans Laufen bekommen.. aber dieses Problem scheinen viele zu haben - Die Dateien werden nicht zum Server übertragen, die Kommentare auf der Seite bieten keine Lösung, die bei mir funktioniert hätte.

                          Das Flash-Programm kommt auch mit sehr großen Bildern zurecht, außerdem können viele Dateien auf einmal hochgeladen werden.

                          Abgelegt werden sie in unter /uploads/ im Skript-Ordner, von wo aus Sie mit PHP weiter verarbeitet werden können (z.B. in ne Datenbank, etc.)

                          Danke für Eure Hilfe, hatte bis dato einfach nicht effektiv bei Google gesucht =)
                          LG, Nico

                          Kommentar

                          Lädt...
                          X