el capítulo correspondiente de la documentación es this one y yo creo que es bastante claro: si por ejemplo desea decodificar archivos de imagen en el nuevo .zap
-format, se escribe un módulo de ZapImagePlugin.py
que debe llevar a cabo un par de cosas:
- tienen
class ZapImageFile(ImageFile.ImageFile):
con atributos de cadena format
y format_description
, y un método de gancho def _open(self)
(más adelante);
- a nivel de módulo,
Image.register_open('zap', ZapImageFile)
y Image.register_extension('ZAP', '.zap')
Las especificaciones para el método _open
se establecen muy claramente en el capítulo - que debe leer datos de imagen y los metadatos de objeto de fichero binario abierta self.fp
, aumentar SyntaxError
(u otra excepción) lo antes posible si detecta que el archivo no está realmente en el formato adecuado, ajustado al menos self.size
y self.mode
atributos, y con el fin de permitir lectura la imagen, también self.tile
, una lista de descriptores baldosas de nuevo en la forma t especificado en ese capítulo (incluido el offset de archivos, que usted dice que conoce, y un decodificador; si los decodificadores crudos o de bits, documentados en el capítulo, no satisfacen sus necesidades, el capítulo recomienda estudiar las fuentes de algunos de los muchos decodificadores suministrados, como JPEG, PNG, etc.).
Parece una buena reutilización de código. P: ¿Su enfoque dio como resultado que se registrara un nuevo tipo de imagen y una extensión y, de ser así, hubo algún inconveniente al hacerlo? – martineau
@martineau: Necesitaba esto para operar en una secuencia binaria existente, así que no intenté registrar nada. Para ser específico, estaba leyendo un archivo PNG incrustado en un archivo de datos del juego. –