问题标签 [pypng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
93 浏览

python - 当 PNG 有效时,PyPng 抛出签名 FormatError

我正在尝试制作一个以不同方式组合图像的小型 python 程序,但是当我尝试打开图像时,它会抛出: png.FormatError: FormatError: PNG file has invalid signature.

这是代码:

我确定文件没有损坏,因为它在所有内容(aseprite、gimp、paint、paint.net 和 krita)中都可以正常打开,还有什么可能导致此错误?

0 投票
1 回答
400 浏览

python - 使用 PyPNG,我如何用它读取 PNG?

起初这似乎是一个愚蠢的问题——只需阅读文档!——但我做到了,但不知道如何读取文件并获得 RGB 值。简单地说,尚不清楚什么是什么意思。

有人可以告诉我如何使用 RGB 数据正确读取文件吗?

0 投票
1 回答
48 浏览

python - 如何在 Python 中逐块处理大型 PNG 图像中的 IDATA

首先,我想参考问题29513549,所有受访者似乎都同意,PNG 图像格式被设计为具有多个 IDAT 块以用于更大图像的读取和写入是有道理的。这些 IDAT 块包含实际的图像值。
我的问题适用于阅读过程。为了重建这些值,首先需要使用 zlib 解压缩数据,然后应用逆滤波器函数:未压缩的数据尽可能包含与先前值的差异。到目前为止,我只遇到过将所有 IDATA 块连接在一起的示例——例如在Paul Tan的这篇写得很好的博客中——这意味着所有数据都必须加载到内存中。我想这就是为什么 Python 包的文档pypng警告 Reader 类的 read 方法“可能会使用过多的内存”。
我对zlib的解压不是很了解。我知道这里有描述,但看起来很复杂。这是因为 IDAT 块之间的边界是任意的。终止 zlib 检查值很有可能在 IDAT 块之间拆分。尽管如此,我想找到一种方法来解压缩 IDATA 块,而无需同时将所有数据加载到内存中——即使这可能意味着每个块必须被读取两次。如果没有办法做到这一点,那么从 PNG 图像中检索多个 IDAT 块的可能性是没有用的。我期待着你的回答。