2010-02-13 32 views
10

Tôi có một tệp có chứa một hình ảnh duy nhất có định dạng cụ thể ở mức bù trừ cụ thể là . Tôi đã có thể nhận được một tệp tương tự cho hình ảnh được nhúng hỗ trợ read(), seek()tell(). Tôi muốn tận dụng lợi thế của bộ giải mã PIL hiện có để xử lý hình ảnh được nhúng, nhưng có thể coi toàn bộ tệp là "tệp hình ảnh".Mở rộng bộ giải mã PIL

Tôi đã không thể tìm ra cách thực hiện việc này với documentation available và tự hỏi liệu có ai có bất kỳ thông tin chi tiết nào về cách tôi có thể thực hiện việc này hay không.

Trả lời

3

Điều tôi đã làm để giải quyết điều này là lấy được từ con số ImageFile.ImageFile thuộc định dạng được nhúng thay vì trực tiếp ImageFile.ImageFile. Sau đó, trong _open() tôi đã thay thế self.fp bằng hình ảnh giống như hình ảnh được nhúng và được gọi là số _open() của phụ huynh. Tôi không thể nói rằng tôi đặc biệt hạnh phúc khi làm theo cách này, nhưng có vẻ như nó đã hoạt động.

+0

Âm thanh như sử dụng lại mã tốt. Hỏi: Cách tiếp cận của bạn có tạo ra một loại hình ảnh mới và tiện ích mở rộng đang được đăng ký hay không và liệu có điều gì phức tạp về việc thực hiện nó không? – martineau

+0

@martineau: Tôi cần điều này để hoạt động trên luồng nhị phân hiện có, do đó tôi không cố đăng ký bất kỳ thứ gì. Để cụ thể, tôi đã đọc một tệp PNG được nhúng trong một tệp dữ liệu trò chơi. –

7

Chương có liên quan của các tài liệu là this one và tôi nghĩ rằng đó là khá rõ ràng: nếu ví dụ bạn muốn giải mã tập tin hình ảnh trong .zap -format mới, bạn viết một module ZapImagePlugin.py mà phải thực hiện một vài điều:

  • có một số class ZapImageFile(ImageFile.ImageFile): với các thuộc tính chuỗi formatformat_description và móc phương thức def _open(self) (trong đó sau này);
  • ở cấp mô-đun, Image.register_open('zap', ZapImageFile)Image.register_extension('ZAP', '.zap')

Các thông số kỹ thuật đối với phương pháp _open được đặt rất rõ ràng trong chương - nó phải đọc dữ liệu hình ảnh và siêu dữ liệu từ mở tập tin giống như đối tượng nhị phân self.fp, nâng cao SyntaxError (hoặc một ngoại lệ khác) càng sớm càng tốt nếu phát hiện tệp không thực sự ở định dạng phù hợp, hãy đặt ít nhất self.sizeself.mode thuộc tính và để cho phép đọc hình ảnh, cũng self.tile, danh sách mô tả gạch một lần nữa forma t được chỉ định trong chương đó (bao gồm cả tập tin bù đắp, mà bạn nói bạn biết, và bộ giải mã - nếu bộ giải mã thô hoặc bit, được ghi trong chương, không đáp ứng nhu cầu của bạn, chương đề nghị nghiên cứu các nguồn của một số của nhiều bộ giải mã được cung cấp, chẳng hạn như JPEG, PNG, v.v.).

Các vấn đề liên quan