Расширение декодера 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 и т.д.).