扩展PIL解码器

Ign*_*ams 11 python python-imaging-library

我有一个文件,其中包含特定偏移量的特定格式的单个图像.我已经可以得到一个类文件的支持嵌入图像read(),seek()tell().我想利用现有的PIL解码器来处理嵌入的图像,但能够将整个文件本身视为"图像文件".

鉴于可用文档,我无法弄清楚如何做到这一点 ,并想知道是否有人对我如何做到这一点有任何见解.

Ale*_*lli 7

文档的相关章节就是这一章,我认为它非常清楚:例如,如果您想要在新.zap格式中解码图像文件,那么您需要编写一个ZapImagePlugin.py必须执行以下操作的模块:

  • 有一个class ZapImageFile(ImageFile.ImageFile):带字符串的属性formatformat_description一个钩子方法def _open(self)(后面会有更多);
  • 在模块级别,Image.register_open('zap', ZapImageFile)Image.register_extension('ZAP', '.zap')

对于该规范_open方法一章中很明确的规定-它必须从开放二进制文件的对象读取图像数据和元数据self.fp,提高SyntaxError(或其他异常)尽快如果它检测到该文件实际上并不是正确的格式,至少设置self.sizeself.mode属性,为了让阅读的图像,还self.tile的列表,瓦块描述该章规定的格式发送再次(包括文件偏移,你说你也知道,和一个解码器-如果本章中记录的原始或位解码器不能满足您的需求,本章建议研究一些提供的解码器的来源,如JPEG,PNG等.


Ign*_*ams 4

ImageFile.ImageFile我为解决这个问题所做的就是从属于嵌入格式的子项派生,而不是ImageFile.ImageFile直接派生。然后_open()self.fp用类似文件替换嵌入图像,并调用父级的_open(). 我不能说我特别高兴这样做,但它似乎奏效了。