Bilddemensionen eines als Blob gespeicherten Bildes

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

  • Bilddemensionen eines als Blob gespeicherten Bildes

    Hallo Freunde,

    hab Bilder als blobs in der DB liegen (warum das schlecht/gut ist sei mal dahingestellt, ist einfach so, da gibts auch keinen Ausweg) und möchte gerne die Dimensionen dieser Bilder auslesen.

    Scheitere aber mit imagesx/y, das ja eigentlich eine img-ressource übernehmen würde? Also um die Frage zu konkretisieren, wie "caste" ich das MySQL-blob in eine PHP-Image Ressource?

    Hab das Gefühl die Lösung müsste wirklich simpel sein, aber ich steh grade wieder mal auf dem Schlauch

    Anzeigen klappt natürlich einfach mit

    Code:
    header('Content-Type: image/'.$result['type']);
    
    echo $result['content'];
    Danke!

  • #2
    getimagesize will eine Datei als Parameter haben - zu „casten“ gibt es da nichts.
    Entweder schreibst du das Bild in eine (temporäre) Datei, um die Funktion darauf anwenden zu können;
    oder du schaust, ob sich das mit dem Wrapper php://memory ggf. gleich im Speicher machen lässt (wobei das für die Performance ungünstig sein könnte).
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      PHP: imagecreatefromstring - Manual

      Kommentar


      • #4
        Hallo,

        du kannst entweder getimagesize mit einer Data-URL benutzen, wenn auf dem Server fopen-Wrapper aktiviert sind oder das Bild mit imagecreatefromstring laden und dann mit imagesx/imagesy rangehen.

        Im Falle der Data-URL sähe das so aus:

        Code:
        $info = getimagesize("data:image/[I][COLOR="Orange"]type[/COLOR][/I];base64," . base64_encode($result["content"]));
        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Super Leute danke, haargenau "imagecreatefromstring" hab ich gesucht.

          Das Forum hilft mir jedes Mal weiter, manchmal hab ichn schlechtes Gewissen weil ich ganz einfach zu langsam bin irgendwas zu beantworten und irgendwas zurückzugeben

          Also nochmal danke!

          Kommentar


          • #6
            Zitat von ThemBones Beitrag anzeigen
            Super Leute danke, haargenau "imagecreatefromstring" hab ich gesucht.
            Ganz sicher nicht. Spätestens, wenn die Abmessungen des Bildes dein Memory-Limit sprengen, wirst du wieder angequengelt kommen. Wetten?
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar


            • #7
              Zitat von fireweasel Beitrag anzeigen
              Ganz sicher nicht. Spätestens, wenn die Abmessungen des Bildes dein Memory-Limit sprengen, wirst du wieder angequengelt kommen. Wetten?
              GD entpackt das Bild, ich weiss. Dem Problem hab ich bereits an anderer Stelle Sorge getragen, aber danke

              Kommentar


              • #8
                Zitat von ThemBones Beitrag anzeigen
                GD entpackt das Bild, ich weiss. Dem Problem hab ich bereits an anderer Stelle Sorge getragen, aber danke
                Mit gigantischem Memory-Limit?
                Auch die aktuellste PHP-Version bricht einfach das Script ab, wenn imagecreatefromstring() nicht genügend Platz bietet. Für Fehlerbehandlung ist es dann aber zu spät. Zugegeben, dies ist ein Bug (Feature?) in PHP (nicht in der libgd), aber mir ist bisher kein sicheres Mittel bekannt gewesen, mit dem man vorher feststellen kann, ob die Grafik in den Hauptspeicher passt oder nicht. Du kennst eines. Teilst du dein Wissen mit uns?
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #9
                  Genau deswegen hatte ich noch den Data-URL-Ansatz angesprochen. Der ist wesentlich weniger Speicheraufwändig, zumal man noch prüfen könnte, ob nicht schon die ersten 1000 Bytes ausreichen, um die Größe zu bestimmen. Bei GIF, PNG und JPEG sind die Bildgröße jedenfalls relativ nahe am Dateianfang zu finden.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Zitat von AmicaNoctis Beitrag anzeigen
                    Genau deswegen hatte ich noch den Data-URL-Ansatz angesprochen.
                    Den Teil mit dem fopen-Wrapper hatte ich verstanden Hoffentlich kann getimagesize() auch damit umgehen. In dem Fall würde ich der Funktion einen Stream-Wrapper unterjubeln, der 'php://temp' benutzt. Der ist nicht durchs Memory-Limit eingeschränkt.

                    Der ist wesentlich weniger Speicheraufwändig, ...
                    Den Teil habe ich nicht ganz verstanden. Da die ganze Grafikdatei erst base64-kodiert werden muss, wird der Speicherverbrauch mehr als verdoppelt (raw + base64-kodiert = 233%). Das ist zwar weniger, als das Bild erst mit imagecreate() in den Hauptspeicher zu entpacken, aber auch nicht unbedingt sparsam. Außerdem müssen die Binärdaten erst kodiert und dann wieder dekodiert werden. Einmal hin- und dann wieder zurückzukopieren würde sicher weniger Aufwand machen.

                    ...zumal man noch prüfen könnte, ob nicht schon die ersten 1000 Bytes ausreichen, um die Größe zu bestimmen. Bei GIF, PNG und JPEG sind die Bildgröße jedenfalls relativ nahe am Dateianfang zu finden.
                    Korinthenkackerei: Das gilt für GIF. Bei JPEG ist das nur für JFIF und EXIF garantiert.
                    Aber mit "unvollständigen" Dateien müsste getimagesize() zurechtkommen. Schwierigkeiten dürfte es höchstens bei Containerformaten geben, die mehrere Bilder (oder Streams oder wie auch immer das heißt) mit unterschiedlichen Auflösungen speichern können.
                    Zuletzt geändert von fireweasel; 11.09.2010, 14:11.
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar


                    • #11
                      Warum wird die Bildgröße nicht beim Speichern der Bilddaten auch in die Datenbank geschrieben? Das Ganze beim Auslesen zu machen, finde ich persönlich ziemlich behindert. Mal davon abgesehen, dass ich Bilder gar nicht in der Datenbank speichern würde, aber das ist jetzt ein anderes Thema.

                      Kommentar


                      • #12
                        OffTopic:
                        Zitat von h3ll Beitrag anzeigen
                        Das Ganze beim Auslesen zu machen, finde ich persönlich ziemlich behindert.
                        Im Thread-Titel steht ja auch schon irgendwas davon, dass die Bilder wohl Demenz haben ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Zitat von h3ll Beitrag anzeigen
                          Warum wird die Bildgröße nicht beim Speichern der Bilddaten auch in die Datenbank geschrieben?
                          Das war auch mein erster Gedanke ...
                          Man könnte ja auch jetzt, wo das Kind in den Brunnen gefallen ist, einfach mal in einem Rutsch die Bild-Meta-Daten nachtragen. Dann müsste man sie nicht bei jeder Abfrage extra aus den Binärdaten popeln.
                          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                          Kommentar


                          • #14
                            Zitat von h3ll Beitrag anzeigen
                            Mal davon abgesehen, dass ich Bilder gar nicht in der Datenbank speichern würde, aber das ist jetzt ein anderes Thema.
                            Danke für den Hinweis. Werlesen kann (besonders den ersten Post), ist klar im Vorteil

                            Zitat von fireweasel Beitrag anzeigen
                            aber mir ist bisher kein sicheres Mittel bekannt gewesen, mit dem man vorher feststellen kann, ob die Grafik in den Hauptspeicher passt oder nicht. Du kennst eines. Teilst du dein Wissen mit uns?
                            Nein, kenn ich keines. Aber Imagemagick hilft.

                            Kommentar


                            • #15
                              Zitat von ThemBones Beitrag anzeigen
                              Nein, kenn ich keines.
                              Schade. Also muß ich weiter mit "Breite x Höhe x 5" schätzen ...

                              Zitat von ThemBones Beitrag anzeigen
                              Aber Imagemagick hilft.
                              Wenn es zur Verfügung steht.
                              Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                              Kommentar

                              Lädt...
                              X