Bekommen binäre Bilddaten von PIL.Bild?
Ich habe ein Bild geöffnet in PIL etwa so:
from PIL import Image
i = Image.open("image.jpg")
Ich brauche Zugriff auf den rohen Inhalt der Datei. Wie kann ich das gesamte Bild-Daten, als wenn ich es getan hätte open(...).read()
?
Seit Sie akzeptiert das ".tobytes" Frage, ich verlasse diesen Kommentar deutlich zu machen, um zukünftige Leser: Sie wollten eigentlich "die rohen pixel-Daten", nicht die "rohen Inhalt der Datei" - das ist, was ich erklärte, wie man.
Oh, wirklich? Dann werd ich akzeptiere Ihre Antwort, ich möchte die original-raw-Datei.
Oh, wirklich? Dann werd ich akzeptiere Ihre Antwort, ich möchte die original-raw-Datei.
InformationsquelleAutor Naftuli Kay | 2015-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
PIL verwendet eine " lazy opening-Mechanismus, in dem der Inhalt der Datei wird nur gelesen, wenn Sie benötigt wird.
Um dies zu tun, ist es wahrscheinlich hält Sie die Datei-Referenz, die in einigen internen (privaten) attribute.
Selbst wenn dieses Attribut ist zugänglich, es ist sicherlich nicht ausgesetzt, die als Teil der oficial PIL-API - und es ist sicherlich nicht dazu gedacht, auf diese Weise verwendet werden.
Sobald die Daten gelesen werden, der Inhalt der Datei wird dekodiert und im Speicher gehalten, als pixel-Werte -
(das ist normalerweise das, was gewünscht ist, beim Umgang mit Bildern). Die Bibliothek sicherlich nicht halten die nicht decodierte Datei Daten in eine Datenstruktur im Speicher, als wäre es bedeutungslos.
Wenn Sie ant die raw-Datei-Inhalt, Sie sind wahrscheinlich die Verarbeitung des Bildes mit einigen
anderen Modul, oder speichern, oder die Iteration über die Daten in einer form, die Agnostiker
um das eigentliche Bild Inhalt - können Sie nicht öffnen Sie einfach die Datei wieder mit einem regulären "geöffnet"?
Image.fp
- Attribut zur Verfügung, welches die Punkte, um die original-Datei verwendet, um dasImage
Objekt. Das Attribut verweist auf die Datei, solange der gesamte Inhalt wurde nicht gelesen von derImage
Objekt. Sobald das passiertImage.fp
aufNone
und keine weitere Referenz auf die ursprüngliche Datei beibehalten.InformationsquelleAutor jsbueno
können Sie sehen, diese Antwort python-Image-PIL auf Binär Hex
InformationsquelleAutor xiaoyu2er
Wenn Sie wollen, um die tatsächlichen bytes der Bild, benutzen Sie einfach
ich.tobytes()
. Dies ist mitKissen
, ich bin mir nicht sicher, ob es in der ursprünglichenPIL
Modul, aber von den docs sollte es sein.f = open('pic.jpg');
img = PIL.Image.open(f).tobytes();
f.seek(0);
img==f.read();
bewerten zuFalse
InformationsquelleAutor MattDMo