Ich versuche, ein Bytearray mit Image.open
und Image.verify()
zu verifizieren, ohne es zuerst auf die Festplatte zu schreiben und dann mit im = Image.open()
zu öffnen. Ich schaute auf die .readfrombuffer()
und .readfromstring()
Methode, aber dort brauche ich die Größe des Bildes (die ich nur erhalten konnte, wenn ich den Bytestream in ein Bild umwandelte).PIL: Bytearray in Bild konvertieren
Meine Read-Funktion sieht wie folgt aus:
def readimage(path):
bytes = bytearray()
count = os.stat(path).st_size/2
with open(path, "rb") as f:
print "file opened"
bytes = array('h')
bytes.fromfile(f, count)
return bytes
dann als Basistest ich versuche, die bytearray zu einem Bild zu konvertieren:
bytes = readimage(path+extension)
im = Image.open(StringIO(bytes))
im.save(savepath)
Wenn jemand weiß, was ich tue, falsch oder wenn es eine elegantere Art gibt, diese Bytes in ein Bild zu konvertieren, das mir wirklich helfen würde.
P.S .: Ich dachte, ich brauche das Bytearray, weil ich Manipulationen an den Bytes (glitch sie Bilder). Das hat funktioniert, aber ich wollte es tun, ohne es auf die Festplatte zu schreiben und dann die Bilddatei von der Platte wieder zu öffnen, um zu prüfen, ob sie kaputt ist oder nicht.
Edit: Alles, was es gibt mir ein IOError: cannot identify image file
Warum lesen Sie das Bild nicht in numpy Array? –
@ViktorKerkez weil ich die Bytes der Bilder manipulieren möchte. Ich habe Arbeitscode für den Manipulationsteil, aber jetzt möchte ich überprüfen, ob das Ausgabebild tatsächlich nicht vollständig unterbrochen ist. Also ich _habe_ mit Bytearrays zu arbeiten – ato