Расширение декодера PIL
У меня есть файл, который содержит одно изображение определенного формата на
конкретное смещение. Я уже могу получить файл для встроенного изображения
который поддерживает read()
, seek()
и tell()
. Я хочу воспользоваться
существующего декодера PIL для обработки встроенного изображения, но иметь возможность
обрабатывать весь файл как "файл изображения" в своем собственном праве.
Я не смог понять, как это сделать, учитывая
документация
доступный и задавался вопросом, не знает ли кто-нибудь, как я мог
сделайте это.
Ответы
Ответ 1
Что я сделал, чтобы решить эту проблему, это получить от дочернего элемента ImageFile.ImageFile
, принадлежащего встроенному формату, а не непосредственно ImageFile.ImageFile
. Затем в _open()
я заменил self.fp
файловым на встроенное изображение и назвал родительский _open()
. Я не могу сказать, что я особенно счастлив делать это таким образом, но, похоже, он сработал.
Ответ 2
Соответствующая глава документов этот, и я думаю, что это довольно ясно: если, например, вы хотите декодировать файлы изображений в new .zap
-format, вы пишете модуль ZapImagePlugin.py
, который должен выполнить пару вещей:
- имеют
class ZapImageFile(ImageFile.ImageFile):
со строковыми атрибутами format
и format_description
, и метод hook def _open(self)
(из которых более поздний);
- на уровне модуля,
Image.register_open('zap', ZapImageFile)
и Image.register_extension('ZAP', '.zap')
Спецификации метода _open
очень четко изложены в главе - он должен считывать данные изображения и метаданные из открытого двоичного файлового объекта self.fp
, повышать SyntaxError
(или другое исключение) ASAP if он обнаруживает, что файл на самом деле не в правильном формате, устанавливает не менее self.size
и self.mode
атрибуты, а для того, чтобы разрешить чтение изображения, также self.tile
, список дескрипторов фрагментов снова в формате, указанном в этом глава (включая смещение файла, которое, как вы говорите, знаете, и декодер), если исходные или битовые декодеры, задокументированные в главе, не соответствуют вашим потребностям, в главе рекомендуется изучить источники некоторых из многих поставляемых декодеры, такие как JPEG, PNG и т.д.).