| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

08-09-2010, 17:20
|
|
ThemBones
Registrierter Benutzer
|
|
Registriert seit: Nov 2005
Beiträge: 131
|
|
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!
|

08-09-2010, 17:33
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.455
|
|
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.
|

08-09-2010, 17:34
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.213
|
|
|

08-09-2010, 17:36
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.463
|
|
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/type;base64," . base64_encode($result["content"]));
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

08-09-2010, 17:41
|
|
ThemBones
Registrierter Benutzer
|
|
Registriert seit: Nov 2005
Beiträge: 131
|
|
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!
|

09-09-2010, 14:02
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von ThemBones
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?
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

09-09-2010, 16:00
|
|
ThemBones
Registrierter Benutzer
|
|
Registriert seit: Nov 2005
Beiträge: 131
|
|
Zitat:
Zitat von fireweasel
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
|

10-09-2010, 00:15
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von ThemBones
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?
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

10-09-2010, 00:35
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Ort: Dresden
Beiträge: 5.463
|
|
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.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

11-09-2010, 15:05
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von AmicaNoctis
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.
Zitat:
|
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.
Zitat:
|
...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.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (11-09-2010 um 15:11 Uhr)
|

11-09-2010, 15:08
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.213
|
|
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.
|

11-09-2010, 15:12
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.455
|
|
OffTopic:
Zitat:
Zitat von h3ll
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.
|

11-09-2010, 15:22
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von h3ll
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.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

24-11-2010, 14:10
|
|
ThemBones
Registrierter Benutzer
|
|
Registriert seit: Nov 2005
Beiträge: 131
|
|
Zitat:
Zitat von h3ll
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:
Zitat von fireweasel
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.
|

24-11-2010, 23:39
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 644
|
|
Zitat:
Zitat von ThemBones
Nein, kenn ich keines.
|
Schade. Also muß ich weiter mit "Breite x Höhe x 5" schätzen ...
Zitat:
Zitat von ThemBones
Aber Imagemagick hilft.
|
Wenn es zur Verfügung steht.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|