2010-02-13 30 views
10

belirli bir ofsette belirli bir biçimin tek bir görüntüsünü içeren bir dosyam var. Zaten , seek() ve tell() destekleyen gömülü görüntü için bir dosya benzeri alabilirsiniz. Gömülü görüntüyü işlemek için mevcut bir PIL kod çözücüsünün avantajını kullanmak istiyorum, ancak tüm dosyayı kendi başına bir "görüntü dosyası" olarak ele alabilir.PIL kod çözücüsünü genişletme

ben nasıl anlamaya edemedik bu documentation available verilen ve herkes ben nasıl yapabileceğini olarak herhangi bir analiz olsaydı merak ediyorum.

cevap

3

Bunu çözmek için ne yaptım, doğrudan ImageFile.ImageFile yerine katıştırılmış biçime ait ImageFile.ImageFile alt öğesinden türemekti. Daha sonra _open() içinde, self.fp'u gömülü görüntüye dosya gibi ekledim ve üst öğenin _open() olarak adlandırdım. Bunu böyle yapmaktan özellikle mutlu olduğumu söyleyemem ama işe yaramış gibi görünüyor.

+0

İyi bir kodun yeniden kullanılması gibi görünüyor. S: Yaklaşımınız yeni bir görüntü türüne ve kaydın kaydedilmesine neden oldu mu? – martineau

+0

@martineau: Mevcut bir ikili akışta çalışmak için buna ihtiyacım vardı, bu yüzden hiçbir şey kaydetmeyi denemedim. Spesifik olmak gerekirse, bir oyun veri dosyasına gömülü bir PNG okuyordum. –

7

dokümanlar ilgili bölüm this one ve ben oldukça açık olduğunu düşünüyorum:

: örneğin yeni .zap -Format görüntü dosyaları çözmek istiyorsanız, bir kaç şey gerçekleştirmelisiniz bir ZapImagePlugin.py modülü yazmak
  • dize sahip class ZapImageFile(ImageFile.ImageFile):format ve format_description ve kanca yöntem öznitelikleri def _open(self) (ki daha sonra bir); _open yöntemi için modül düzeyinde
  • , Image.register_open('zap', ZapImageFile) ve Image.register_extension('ZAP', '.zap')

gözlük çok net bölümde - koyulur açık ikili dosya benzeri bir nesne self.fp gelen görüntü verilerini ve meta okumalı, SyntaxError yükseltmek (veya başka bir istisna) en kısa sürede bu dosya, doğru biçimde aslında olmayan en az self.size ve self.mode özelliklerini ayarlayın ve yine de, self.tile, kiremit tanımlayıcıları listesini görüntüsünü okuma sağlamak için algılarsa forma Bu bölümde belirtilmişse (bildiğiniz dosya-ofset, ve bir kod çözücü de dahil olmak üzere), eğer bölüm içinde belgelenen ham veya bit kod çözücüler ihtiyaçlarınızı karşılamıyorsa, bölüm bazı kaynakların JPEG, PNG, vb. gibi birçok sağlanan dekoderin