Wie kann ich ein PIL Image-Objekt in einer Vorlage?
Wenn ein Benutzer lädt ein Bild hoch, und ich verkleinere es mit PIL, bekomme ich eine PIL Image-Objekt.
Wie kann ich ein PIL Image
- Datei in eine Vorlage, bevor es gespeichert wurde, um die Datenbank? Kann es auch weitergegeben werden, wie ein Bild und gerendert?
- Sind Sie sicher, dass Sie wollen, um das Bild direkt von deinem Django-Prozess? Es wird nicht nur konsumieren, kostbare Erinnerung, es wird auch binden ein thread oder Prozess
- (Ohne konkreten Beweis) ich denke, Sie sind viel besser dran, das Bild speichern, und lassen Sie den front-end-webserver machen die byte-Ordnung für Sie. Werfen Sie einen Blick auf X-Sendfile (Apache) oder X-Accel-Redirect (Nginx).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine begrenzte Gruppe von Browsern, können Sie die base64-codieren Sie das Bild und verwenden Sie inline-Bilder. Sehen Die Einbettung Mit Base64 Bilder.
Eine Lösung, die funktioniert für alle Browser ist ein image-tag verweisen auf eine Ansicht, dass die Rendite der Bild.
[update]
Gut... Wenn Sie
<img src="foo">
foo ist immer abgerufen, indem eine BEKOMMEN, vielleicht ist das, warum es nicht funktioniert - Anfrage.DATEIEN werden nicht in einer GET-Anforderung. Wenn Sie öffnen Sie firebug oder die chrome-Symbolleiste Debuggen auf der Registerkarte Netzwerk, werden Sie sehen, die POST-Anforderung mit dem hochgeladenen Bild und nach, dass eine GET-Anforderung zum abrufen der Bild.Speichern Sie das Bild irgendwo zwischen den beiden Stufen.
Beliebte Wahl sind redis und memcached. Sie können von Ihnen denken, als Riesen-shared python-dict mit einem Verfallsdatum. Wenn die Bilder klein sind, wie ein avatar, Sie können auch speichern Sie die image-Daten in einer session variable.
<img src="/url/to/my/image-returning/view/perhaps/with/1/or/2/parameters/" alt="the same url from urls.py, got it?">
Image
zu denHttpResponse
Objekt (vielen Dank!), aber ich habe Mühe, es zu arbeiten, von der image-tag im template. Vielleicht bin ich nicht die übergabe eines bestimmten Parameters in der url, ich bin mir nicht sicher.Ja und Nein.
Ja, man kann die Bilder als raw Base64-Daten. Hier ein kleines Skript, das Sie verwenden können, um dies zu testen:
Allerdings ist dies eine wirklich schlechte Idee. Mit mehreren thumbnails, Ihre einzige HTML-Seite sein könnte, 10MB+.
Was Sie wirklich tun sollte, ist über eine separate Django-Blick zurück-Bilder aus PIL-Objekte als PNG-Dateien, und verweisen auf die anzeigen in der
img
href
Attribute auf Ihrer Seite.Können Sie einbetten base64-codierte Bilder in einem tag. So könnte man konvertieren PIL image zu base64 und dann zeigt es.
Dann zeigen Sie mit:
Blick auf ein Beispiel für die Ausgabe.