簡體   English   中英

如何在 Python 中逐塊處理來自大型 PNG 圖像的 IDATA

[英]How to process IDATA from large PNG images chunk by chunk, in Python

首先,我想參考問題29513549 ,所有受訪者似乎都同意,PNG 圖像格式設計為在較大圖像的情況下具有多個 IDAT 塊(用於讀取和寫入)是有道理的。 這些 IDAT 塊包含實際的圖像值。
我的問題適用於閱讀過程。 為了重建這些值,需要首先使用 zlib 解壓縮數據,然后應用逆向濾波器函數:未壓縮的數據在可能的情況下包含與先前值的差異。 到目前為止,我只遇到過將所有 IDATA 塊連接在一起的示例 - 例如在Paul Tan寫得很好的博客中 - 這意味着所有數據都必須加載到內存中。 我想這就是為什么 Python 包pypng的文檔警告 Reader 類的 read 方法“可能會使用過多內存”的原因。
我對zlib的解壓不是很了解。 我知道這里有描述,但看起來很復雜。 這是因為 IDAT 塊之間的邊界是任意的。 並且很有可能將終止 zlib 檢查值拆分到 IDAT 塊中。 盡管如此,我想找到一種方法來解壓縮 IDATA 塊,而無需同時將所有數據加載到內存中——即使這可能意味着每個塊都必須讀取兩次。 如果沒有辦法做到這一點,那么從 PNG 圖像中檢索多個 IDAT 塊的可能性是沒有用的。 我期待着你的回答。

zlib 流,因此您可以一次簡單地將一個 IDAT 塊提供給 zlib 的充氣器,並將解壓后的數據取出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM