【发布时间】:2014-12-18 12:48:06
【问题描述】:
我想知道是否有一种方法可以使用 PyPNG(如逐行或逐块)迭代地编写 png 文件,而不向 png.Writer() 提供整个数据。我查看了文档,但所有编写器方法都需要一次 PNG 的所有行(使用太多内存)。
提前致谢!
【问题讨论】:
-
这可能是个问题,因为 PNG 需要整个图像压缩。所以在压缩之前,
pypng需要整个图像。它可能仍然是可能的,但仅限于对“可能”的足够广泛的解释;您可能需要从头开始编写自定义压缩代码。 -
@jongware,也许 pypng 需要整个图像,但这并不是因为 PNG 格式本身的缺点,它被设计为可流式传输。 libpng支持PNG文件的增量读写,zlib支持增量压缩。实际上,libpng 附带的 pngtest.c 演示了一次读取和写入图像,每行使用相同的行缓冲存储器。 pypng docs pythonhosted.org/pypng/png.html 似乎表明在编写“隔行扫描”PNG 输出时,整个图像只需要在内存中。
-
@GlennRanders-Pehrson 我已经尝试使用 PyPNG,但文档不清楚使用哪种编写器方法(我尝试了所有方法)。不过,我肯定会看看 libpng。感谢您的建议。
-
@Jongware:我用Java 做了这个(我需要这个),后来把它移植到C#。原则上当然可以,除了隔行扫描的 PNG。
-
太棒了——我不知道这是
libpng中的一个选项!那么剩下的唯一问题就是:这个函数暴露给pypng了吗?浏览其来源,我找不到合理的名称。