我有一个文件,其中包含a的特定格式的单个图像
特定偏移量。我已经可以获得嵌入式图像的文件了
它支持read()
,seek()
和tell()
。我想利用
一个现有的PIL解码器来处理嵌入的图像,但能够
将整个文件视为“图像文件”。
鉴于此,我无法弄清楚如何做到这一点 documentation available并且想知道是否有人对我的能力有任何见解 这样做。
答案 0 :(得分:7)
文档的相关章节是this one,我认为相当清楚:例如,如果要以新的.zap
- 格式解码图像文件,则编写ZapImagePlugin.py
必须执行一些事情的模块:
class ZapImageFile(ImageFile.ImageFile):
字符串属性format
和format_description
,还有一个钩子方法def _open(self)
(稍后会更新); Image.register_open('zap', ZapImageFile)
和Image.register_extension('ZAP', '.zap')
_open
方法的规范在本章中非常明确 - 它必须从打开的二进制文件类对象self.fp
读取图像数据和元数据,引发SyntaxError
(或者另一个例外)如果它检测到文件实际上不是正确的格式,至少设置了self.size
和self.mode
属性,并且为了允许读取图像,还有self.tile
,瓦片描述符的列表,再次采用该章中指定的格式(包括文件偏移量,你说你知道)和解码器 - 如果原始或位本章中记录的解码器不能满足您的需求,本章建议研究一些提供的解码器的来源,如JPEG,PNG等。
答案 1 :(得分:3)
我要解决的问题是直接从属于嵌入格式的ImageFile.ImageFile
子项而不是ImageFile.ImageFile
派生。然后在_open()
中,我将self.fp
替换为与嵌入图像类似的文件,并调用父级_open()
。我不能说我特别高兴这样做,但似乎有效。