Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Считать jpg по 8 бит, по 16 бит, по 24 бита

#python


Имеется jpg файл. Хочу получить список битовых цепочек файла по 8, по 16 и по 24
бита, используя python. В дальнейшем хочу проанализировать распределение вероятности
появления каждого из исходов для данных трех размерностей.

На данный момент разобрался, как получить список из десятичных чисел по 8 бит:

with open("1.jpg", "rb") as imageFile:

f = imageFile.read()
b = list(bytearray(f))


Каким образом можно сделать то же самое для цепочек из 16 и 24 бит?
    


Ответы

Ответ 1



Так как вы уже начитали ваш файл до битовой цепочки f, вы можете её использовать как псевдо-файл и читать по 2 (или по 3) байта из неё в цикле: import io f_as_file = io.BytesIO(f) c = [] while True: part = f_as_file.read(2) # или 3 if part: c.append(part) else: break или с применением абстракции списка (list comprehension) (вместо инициализации списка c и добавления к нему в цикле): import io BYTES = 2 # или 3 f_as_file = io.BytesIO(f) c = [f_as_file.read(BYTES) for __ in range(len(f) // BYTES)]

Ответ 2



Так как вы уже начитали ваш файл до битовой цепочки f, вы можете из её сделать 2- или 3-байтовые отрезки: BYTES_COUNT = 2 # или 3, или даже 1 - вместо вашего b = list(bytearray(f)) c = [f[i:i+BYTES_COUNT] for i in range(0, len(f), BYTES_COUNT)] Тест: Пусть f = b'\0\1\2\3\4\5\6\7\x08\x09\x0A\x0B'. Тогда для BYTES_COUNT = 2 будет вывод команды print(c) такой: [b'\x00\x01', b'\x02\x03', b'\x04\x05', b'\x06\x07', b'\x08\t', b'\n\x0b'] и для BYTES_COUNT = 3 такой: [b'\x00\x01\x02', b'\x03\x04\x05', b'\x06\x07\x08', b'\t\n\x0b'] Примечание: b'x09' то-же самое как b'\t' (табулятор) и b'x0a' то-же самое как b'\n' (новая строка).

Комментариев нет:

Отправить комментарий