Я понимаю, что в Python есть несколько способов получить все пиксели изображения, используя внешние библиотеки, такие как PIL
или Image
.Заинтересовавшись испытать свои бинарные навыки, я решил пойти дальше и попытаться прочитать пиксели в сыром Python с двоичными данными из файла.Это изображение, которое я использовал в качестве примера:
Из других вопросов я понял, что мне нужно преобразовать байты в целую кучуцелые числа без знака перед обработкой.Я использовал struct.unpack
, чтобы сделать это.Вот моя программа:
import struct
with open('connect.jpg', 'rb') as fp:
data = fp.read()
print(struct.unpack("I"*int(len(data)/4), data))
Это дает мне целую кучу сумасшедших целых чисел.Я полагал, что это были просто целые числа RGB, которые мне пришлось конвертировать, поэтому я сделал это.Несколько проблем здесь:
Список пикселей был только 2019, в то время как мое изображение 320x240.
Цвета пикселей были ужасновыкл.Я бы подумал, что первые несколько тысяч пикселей были бы близки к rgb(0,0,0)
, но я получал зеленый, фиолетовый, желтый, красный - все.
Для справки, воткод, который я использовал для преобразования целых чисел без знака в кортежи RGB:
def rgb_int2tuple(rgbint):
return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)
Я чувствую, что здесь я использую совершенно неправильный подход.Возможно ли не прочитать данные в нужном формате или что-то напутало с моей функцией int-to-RGB?