Перекодирование отдельных блоков JPEG с помощью Pillow/PIL

Есть ли в PIL / Pillow способ открыть файл JPEG, изменить часть изображения, а затем сохранить изображение обратно в JPEG, где перекодируются только блоки с изменениями?

Существуют библиотеки с поддержкой этого: https://en.wikipedia.org/wiki/JPEG#Lossless_editing


person Alex Rothberg    schedule 06.04.2015    source источник


Ответы (1)


То, что вы описываете, невозможно. JPEG кодирует в группах, называемых MCU, которые состоят из одного или нескольких блоков данных 8x8. Вам придется кодировать вдоль блока данных или границы MCU.

Другая проблема заключается в том, что коэффициенты DC (коэффициент [0,0] из DC) кодируются вместе. Изменение одного означает, что вам нужно изменить все последующие.

person user3344003    schedule 06.04.2015
comment
Это техника, о которой я говорю: betterjpeg.com/jpeg-plug-in. хтм. - person Alex Rothberg; 06.04.2015
comment
Они должны были бы делать некоторые прикосновения к другим блокам. Вы можете получить почти такой же эффект, используя те же таблицы квантования и выборки при повторном сжатии. - person user3344003; 07.04.2015
comment
1. Да, вы можете просто использовать те же таблицы. 2. JPEG позволяет определять несколько таблиц квантования и Хаффмана, поэтому вы можете изменить заголовок и добавить новые таблицы, если это оптимально. В любом случае, возможна неперекодируемая заблокированная блокировка, поэтому мой вопрос: возможно ли это в PIL. - person Alex Rothberg; 07.04.2015
comment
Нет, вы должны прочитать семплирование таблиц квантования из исходного файла, а затем использовать их при повторном сжатии. Вы можете изменить таблицы Хаффмана без каких-либо последствий. Вы все еще повторно сжимаете данные, но с небольшими изменениями. - person user3344003; 07.04.2015