扩展PIL解码器

时间:2010-02-13 11:33:30

标签: python python-imaging-library

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

鉴于此,我无法弄清楚如何做到这一点 documentation available并且想知道是否有人对我的能力有任何见解 这样做。

2 个答案:

答案 0 :(得分:7)

文档的相关章节是this one,我认为相当清楚:例如,如果要以新的.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等。

答案 1 :(得分:3)

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