Значения пикселей Python и PIL различаются для GIF и JPEG

#python #python-imaging-library #gif #jpeg

#python #python-imaging-library #gif #jpeg

Вопрос:

У меня вопрос о значениях пикселей, возвращаемых из изображения, открытого с помощью функции загрузки PIL. Я использую следующий код:

 frame = Image.open(fname).load()
a = frame[10, 10]
  

Если я загружаю изображение GIF, a это целочисленное значение 43. Но если я конвертирую изображение в JPEG и повторно запускаю код, a получается кортеж (253, 254, 100) .

Почему? И как я могу преобразовать (253, 254, 100) обратно в 43?

Ответ №1:

GIF-файлы разбиты на палитры, тогда как JPEG-файлы имеют формат RGB. Процесс преобразования изображения приводит к удалению палитры, поэтому вам придется просмотреть записи палитры в GIF, чтобы найти наиболее близкое соответствие желаемому цвету.

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

1. Для дальнейшего уточнения: изображение GIF содержит таблицу (до) 256 цветов. У каждого пикселя есть индекс в этой таблице (в вашем примере 10), который используется для определения его цвета. Файлы JPEG хранят значения RGB для каждого пикселя. Если вы посмотрите на запись 10 в таблице цветов GIF, она должна быть (253, 254, 100) (или очень близка к ней).