Próbuję zweryfikować bytearray z Image.open
i Image.verify()
bez uprzedniego zapisania go na dysku, a następnie otwarcia go za pomocą im = Image.open()
. Spojrzałem na metodzie .readfrombuffer()
i .readfromstring()
, ale muszę rozmiaru obrazu (które mogę dostać tylko przy przeliczaniu bytestream do obrazka).PIL: Konwertuj Bytearray na obraz
My odczytu funkcji wygląda następująco:
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
następnie jako podstawowy test próbuję przekonwertować ByteArray do obrazu:
bytes = readimage(path+extension)
im = Image.open(StringIO(bytes))
im.save(savepath)
Jeśli ktoś wie, co robię źle lub jeśli istnieje bardziej elegancki sposób konwersji tych bajtów na obraz, który naprawdę mi pomoże.
P.S .: Myślałem muszę ByteArray ponieważ robię manipulacje na bajtów (glitch im obrazy). To zadziałało, ale chciałem to zrobić bez zapisywania go na dysku, a następnie ponownego otwarcia pliku obrazu z dysku, aby sprawdzić, czy jest uszkodzony, czy nie.
Edit: Wszystko to daje mi to IOError: cannot identify image file
Dlaczego nie czytasz obrazu w tablicy numpy? –
@ViktorKerkez, ponieważ chcę manipulować bajtami obrazów. Mam działający kod dla części Manipulation, ale teraz chcę sprawdzić, czy obraz wyjściowy faktycznie nie jest całkowicie zepsuty. Więc mam do pracy z bytearrays – ato