Я пытаюсь очистить некоторые файлы изображений (gif, jpg) из существующего файла данных.Файл данных разделен на куски по 4096 байт.Изображения фрагментированы, но не используется обратная фрагментация.
У меня есть смещение изображения, файл gif89a, и я вырезал весь файл под заголовком блоками по 4096 байт.То, что я пытаюсь сделать, это назначить первый блок после стартового блока и убедиться, что эти два блока действительно последовательны и имеют «смысл», когда они расположены таким образом.Если они имеют смысл, другой блок помещается позади, если нет, предыдущий размещенный блок удаляется.
import itertools
from PIL import Image
import os
with open('project_def_stripped.data', 'rb') as data:
data.seek(344064)
start_block = data.read(4096)
data.close()
i = 344064 + 4096
chunk_list = []
with open('project_def_stripped.data', 'rb') as data:
while i < 33013744:
data.seek(i)
chunk = data.read(4096)
if chunk.count(b'\x00') != 4096:
# if chunk.count(b'\xFF') < 50:
chunk_list.append(chunk)
i = i + 4096
print(len(chunk_list))
i = 0
j = 0
with open('foto/testikel.jpg', 'wb') as picture:
picture.write(start_block)
while i < len(chunk_list):
picture.write(chunk_list[i])
picture.close()
img = Image.open('foto/testikel.jpg')
if img.verify():
picture = open('foto/testikel.jpg', 'ab')
i = i + 1
else:
picture = open('foto/testikel.jpg', 'ab')
picture.seek(-4096, os.SEEK_END)
picture.truncate()
picture.seek(os.SEEK_END)
i = i + 1
img.close()
Теперь, похоже, проблема в том, что Image.verify () из Pillow не может проверить изображение, если данные изображения не заполнены.В других случаях он всегда возвращает false.
Есть ли другой способ проверить, что блоки, которые я размещаю за стартовым блоком, действительно являются правильными блоками?