erhalten Ich habe herausgefunden, wie Sie PIL verwenden, um die Bildabmessungen zu erhalten, aber nicht die Dateigröße in Bytes. Ich muss die Dateigröße kennen, um zu entscheiden, ob die Datei zu groß ist, um in die Datenbank hochgeladen zu werden.Wie Bildgröße (Bytes) mit PIL
Antwort
Versuchen:
import os
print os.stat('somefile.ext').st_size
gibt es jetzt Möglichkeit, PIL selbst zu verwenden? –
Warum sollten Sie PIL verwenden? – thebjorn
zu steuern, ob es ein Bild ist nicht ein gefälschter Image-Header, um ein Upload-Profil zu machen, und speichern Sie es dann in der Datenbank, so ist es offensichtlich, eine Methode in PIL zu machen, um die Größe in Bytes nicht zu bekommen? –
Ich bin ein bisschen spät, aber ich kam in dieser Frage 5 Minuten vor, wenn die Suche, wie die Größe eines PIL Bild zu erhalten, ohne sie auf die Festplatte zu speichern. Falls sich jemand anderes über diese kommt, ist dies eine einfache Art und Weise tun:
import StringIO
output = StringIO.StringIO()
image_output.save(output, 'PNG') #a format needs to be provided
contents = output.getvalue()
output.close()
image_filesize = len(contents)
Wenn Sie bereits das Bild auf dem Dateisystem haben:
import os
os.path.getsize('path_to_file.jpg')`
Wenn Sie jedoch wollen, dass die bekommen gespeichert Größe eines Bild, das im Speicher und wurde auf das Dateisystem nicht gespeichert:
from io import BytesIO
img_file = BytesIO()
image.save(img_file, 'png')
image_file_size = img_file.tell()
Dieses Verfahren wird mehrere vermeiden liest die Bilddaten als mit StringIO. Beachten Sie jedoch, dass mehr RAM verwendet wird. Alles ist ein Kompromiss. :-)
Edit: Ich habe gerade gesehen, diesen Kommentar aus dem OP:
schließlich das Problem aus der beginnig ist, wenn jemand ein Bild hochladen, die mit 1 giga haben (eine geschmiedete) er‘ Ich werde den Server töten, bevor PIL seine Sachen macht, also muss ich die Anfrage blockieren, bevor sie fertig ist!
Dies ist eine ganz andere Frage, und ist wahrscheinlich am besten am Webserver durchgeführt. Für nginx können Sie dies zu Ihrer Konfiguration hinzufügen:
http {
#...
client_max_body_size 100m; # or whatever size you want as your limit
#...
}
Die 'BytesIO' Methode scheint die Größe zu unterschätzen verglichen mit der Größe von Desk. Irgendeine Idee warum? – getup8
- 1. Python PIL Bildgröße ändern EXIF-Metadaten beibehalten
- 2. Wie bekomme ich die Bildgröße in Bytes mit Javascript
- 3. Übersetzen Bild mit PIL
- 4. Abbildung Metrics mit PIL
- 5. Bildgröße in R ändern
- 6. Wie UIBarButtonItem Bildgröße ändern
- 7. Bildgröße in C reduzieren #
- 8. PIL: Bytearray in Bild konvertieren
- 9. Python - Bildgröße anpassen
- 10. Wie erzeuge ich kreisförmige Thumbnails mit PIL?
- 11. Wie bekomme ich das Bildformat mit PIL?
- 12. Wie reduziere ich die Farbpalette mit PIL
- 13. Wie verwendet man Unicode-Zeichen mit PIL?
- 14. Bildvergleich mit PIL funktioniert nicht wie erwartet
- 15. Neue Vision API - Bildgröße
- 16. Zeichnen mehrsprachigen Text mit PIL
- 17. Füllen eines Bytes [] mit mehreren Bytes [] s
- 18. ImageButton mit verschiedenen Zuständen Bildgröße
- 19. CSS/JS Bildgröße anpassen, um Bildgröße anzupassen
- 20. Python Schleife für Bild und pil Modul
- 21. Bildgröße Proportional + Arbeit mit SVG
- 22. Phalcon Bildgröße
- 23. jquery Bildgröße
- 24. Ändern der Bildgröße mit JavaScript
- 25. MooFlow Bildgröße
- 26. Bildgröße (Java)
- 27. Kontrolle Bildgröße
- 28. UITabBarItem Bildgröße
- 29. Bildgröße von JPEG aus der Binärdatei
- 30. PIL Get Bildpalette
Generieren Sie ein Bild, oder ist das Bild auf der Festplatte gespeichert? –
Verwenden Sie die Dateisystem-API, um die Dateigröße zu erhalten, nicht PIL. – wberry
oder 'len()', wenn Sie es im Speicher haben und nicht im Dateisystem (was wahrscheinlich ist, wenn Sie als BLOB in einer Datenbank speichern.) – geoffspear