Skip to main content

用于保存和加载 PNG 图像的纯 Python 库

项目描述

PyPNG 的自述文件

drj@pobox.com

介绍

Python的PNG模块。PyPNG 完全用 Python 编写。

快速开始

import png
png.from_array([[255, 0, 0, 255],
                [0, 255, 255, 0]], 'L').save("small_smiley.png")

之后,import png然后尝试help(png)。此外,可舔的 HTML 文档出现在html/目录中。如果 HTML 不好,那么您可以尝试man/目录中的 ReST 源。

安装

PyPNG 是纯 Python 并且没有依赖项。它需要 Python 3.5 或任何兼容的更高版本。

要通过 pip 安装 PyPNG 包,请使用:

python -m pip install git+https://gitlab.com/drj11/pypng@pypng-0.20220715.0

安装后使用

`import png`

访问pngPython 程序中的模块。

您也可以使用setuptools. PyPNG 使用setup.cfgandpyproject.toml来记录它的配置。

使用合适的版本从(版本控制的)源安装pip

cd进入目录并执行命令:

python -m pip install .

PyPNG 非常简单,您不需要安装工具。你可以复制code/png.py到任何你喜欢的地方。它旨在让您可以复制png.py到您的应用程序中并分发它。以下curl命令应将最新版本复制到当前目录:

curl -LO https://gitlab.com/drj11/pypng/-/raw/main/code/png.py

发行说明

(有关问题,请参阅https://gitlab.com/drj11/pypng/-/issues/

发布(下一个)

发布 0.20220715.0

开发转移到 gitlab:https ://gitlab.com/drj11/pypng

如果你将一个空文件传递给 PyPNG,它现在会引发内置的 Python 异常EOFError。这应该可以更容易地将空文件问题与真正的格式错误(使用png.FormatError)分开诊断。这是对 API 的轻微破坏性更改。

prirowpng从左到右连续加入 PNG 图像的新工具(旧的内部pipcat工具)。

pricolpng将 PNG 图像从上到下连接到列中的新工具。

支持添加到pripamtopng.

priplan9topng从 Plan 9 图像格式转换为 PNG 的新工具。实际上,这已经在代码库中潜伏多年,但最近已转换为 Python 3。作者只有有限的 Plan 9 图像集合,这限制了可以进行的测试。作者欢迎计划 9 图像的错误报告。

priplan9topng工具有一个更具实验性的选项 --font,可将 Plan 9 子字体文件转换为 PNG 文件序列。

发布 0.0.21

放弃对 Python 2 的支持。支持 Python 3.5 及更高版本。修改了一些辅助工具以在 Python 3 上工作。

通过轮文件安装。

prichunkpng命令行工具现在有一些添加块的新选项:

  • --iccprofile添加一个iCCP块(ICC配置文件);
  • --physical添加一个pHYs块,指定预期的像素大小;
  • --sigbit添加一个sBIT块,指定编码的有效位;
  • --transparent添加一个tRNS块,指定透明颜色。

priditherpng命令行工具标准化并转换为 Python 3。

pripngtopam该工具现在可以--plain选择输出纯 PGM 和 PPM 格式。名称的topam一部分有点用词不当:如果可能(L 和 RGB PNG 文件),该工具将输出 PGM(灰色)或 PPM(RGB)文件。基本上所有可以处理 PAM 文件的工具也可以处理 PGM 或 PPM 文件。PAM 文件不能是普通文件,因此在写入真正的 PAM 文件的情况下,使用该选项会引发错误。

当您写入错误的行数时,会出现更好的错误消息。

(稍微实验性地)将png模块作为命令行工具运行,使用python -m png, 将报告png模块的版本和文件位置。

发布 0.0.20

放弃了对早期版本的 Python 的支持。支持 Python 3.4 及更高版本。Python 2.7 也可以工作,但这是支持任何版本的 Python 2 的最后一个版本。

Cython 代码被移除,这简化了实现。

删除了(可选)依赖项setuptools

将默认值更改为png.Writer灰度。

从 中删除 3D 支持.from_array()

发布 0.0.19

为了简化代码,放弃了对早期版本的 Python 的支持。从 Python 3.x 系列开始,支持从 3.2 开始的所有版本。从 2.x 系列开始,仅支持 Python 2.6 和 2.7。

代码已清理。测试重命名,更有条理。通常符合 Flake 8 标准。减少古代 Python 版本的特殊情况。

写入 PNG 文件时会检查行长度。以前可以通过传入错误长度的行来编写格式错误的 PNG 文件。

pHYS现在处理块。

Writer()接口现在支持每个通道具有不同位深度的源像素。要利用这一点,请为 bitdepth 参数传入一个元组。

辅助工具规范化和简化。

pripamtopng命令行工具将 NetPBM PNM/PAM 文件转换为 PNG。以前png.py是这样做的。请注意,只有一个输入文件被转换,如果您在单独的文件中具有强度和不透明度,您有两种选择:要么使用pamstack将它们转换为单个 PAM 文件并进行转换,要么将每个文件转换为 PNG,然后用于priweavepng编织它们一起。两者都会起作用。

pripngtopam命令行工具将 PNG 转换为 NetPBM PNM/PAM 文件。以前png.py是这样做的。

python -m pngsuite现在是一个命令行工具,用于从 PNG 测试图像套件中写入各种图像。以前可以使用gen.

priweavepng命令行工具跨多个图像执行通道提取。这是一个更通用的版本pipstack(已被删除),灵感pamstack来自 NetPBM。

许多以前工具上可用的--interlace选项现在仅在 上可用priweavepng,使其成为生成隔行扫描 PNG 的首选工具。

prichunkpng命令行工具添加和删除块,并且“智能地”知道透明、伽玛、背景块。它是添加这些块的首选工具,以前可以使用其他工具的各种选项来实现。

gen已重命名为priforgepng.

priforgepng使用中心像素采样,这意味着 256 像素宽的 8 位梯度采用所有可能的 256 个值。它还改善了非常小的图像的输出。

priforgepng用于Fraction内部数学意味着条纹图案是准确的并且没有松散的像素。

priforgepng仅输出灰度 PNG 文件(但请参阅下一项以了解生成彩色 PNG 的功能)。

priforgepng可以将多个 PNG 输出到同一个流上。priweavepng这与从标准输入接受多个 PNG的特性非常吻合。LA、RGB 和 RGBA 测试图像可以通过管道priforgepng生成priweavepngpriforgepng RTL RTR RBR | priweavepng - - - 将生成一个 RGB PNG。

发布 0.0.18

感谢github.com/sean-duffy.from_array()现在可以采用 3D 数组。

在 Python 3 中无法转换为 PNM;现在已解决。第 26 期:https ://gitlab.com/drj11/pypng/-/issues/26

发布 0.0.17

在 Python 3 和 Windows 上运行时的各种修复。github.com/ironfroggy合并来自和 的拉取请求github.com/techtonik,并手动合并来自 的提交github.com/Scondo

发布 0.0.16

与鼻子兼容:nosetests png.py现在可以使用。

允许任何“类文件”对象作为输入。

处理texttopng.

发布 0.0.15

修复了各种 URL 以指向 github.com 而不是 googlecode。

发布 0.0.14

png.py用作命令行工具时,它现在可以生成非方形测试图像。

PyPNG 现在在 Python 3 上以普通安装方式“开箱即用”安装(以前distributepip需要)。

PyPNG 欢迎以下社区贡献:

当 Cython 可用时,Joaquín Cuenca Abela 加快了 PNG 的读取速度。

Josh Bleecher Snyder 添加了一种宽松模式,该模式具有轻松的校验和检查。

nathan@dunfield.info修复了在 Windows 上使用命令行工具时写入文件的问题(问题 62)。

已修复以下问题:

在github上:

问题 6:调色板处理很烦人

在谷歌代码上:

问题 62:在 Windows 上写入 PNG 文件时出现问题

开发已从 googlecode 转移到 github。下面的所有问题,以及紧接在上面的问题,都来自 googlecode 问题跟踪器。所有较新的问题都应该在 github 上。

发布 0.0.13

PyPNG 现在可以在 Python 3 上“开箱即用”地安装。感谢simon.sapin@kozea.frnathan@dunfield.info提供的补丁。

已修复以下问题:

问题 63:setup.py 不使用 2to3 问题 64:文档中的错字

发布 0.0.12

2to3如果您使用该工具,PyPNG 现在可以在 Python 3 上运行。修复了将灰度图像转换为 RGBA 的问题。

已修复以下问题:

问题 60:灰度图像未正确转换为 RGBA 问题 61:不适用于 Python 3

发布 0.0.11

在文档中添加了“PyPNG 有多快”部分。对其进行了更改,以便更多 PNG 格式将其行作为 Pythonarray.array实例返回。

发布 0.0.10

修复 read_flat 方法(已损坏多年)。

已修复以下问题:

问题 56:read_flat 损坏

发布 0.0.9

暂定修复 64 位 Python 2.5 系统上的弃用警告。Plan 9 图像的转换工具。

第 54 期(下)是暂定的。PyPNG 开发人员无法重现该错误(因为它似乎在 64 位 Python 2.5 系统上);任何用户报告都将受到欢迎。

已修复以下问题:

问题 54:使用 pypng 时的弃用警告。问题 55:无法转换 Plan 9 图像。

发布 0.0.8

由于使用brokensuite. 一个已修复的错误非常严重:至少一个输入的无限循环(下面的问题 52)。

已修复以下问题:

问题 47:使用 write_packed 时的前导空格。问题 48:当输入没有 gamma 块时 pipdither 失败。问题 49:pipdither 因 1 位输入而失败。问题 50:pipchunk 添加第二个 gamma 块。问题 51:piprgb 和 pipasgrey 对彩色映射图像失败。问题 52:某些输入导致无限循环。

发布 0.0.7

html/ex.html用于 NumPy 集成的更好的文档(主要是)。

已修复以下问题:

问题 46:不清楚如何将 PNG 像素数据输入和输出 NumPy。

发布 0.0.6

NumPy 整数类型现在可以工作了。

已修复以下问题:

问题 44:不能将 numpy.uint16 用于像素值。

发布 0.0.5

sBIT现在处理块,这意味着 PyPNG 可以从端到端处理从 1 到 16 的任何(单个)位深度。

已修复以下问题:

问题 28:不添加 sBIT 块。问题 36:存在时忽略 sBIT 块。

发布 0.0.4

PyPNG 现在可以在 Python 2.2 上运行(对于 Symbian 用户来说意义重大,因为 PyS60 基于 Python 2.2)。Python 2.2 并非支持所有功能。

已修复以下问题:

问题 16:Source 和 doc 在应该使用 'L' 的地方使用 'K'。问题 32:不接受打包数据。问题 33:无法创建具有透明度的灰度 PNG。问题 35:不适用于 Python 2.2。

发布 0.0.3

处理 PAM 文件允许在涉及 Netpbm 格式和 PNG 的工作流中端到端处理 alpha 通道。PyPNG 现在可以在 Python 2.3 中使用。

已修复以下问题:

问题 14:不读取 PAM 文件。问题 15:不写入 PAM 文件。问题 25:tRNS 块的错误处理。问题 26:asRGBA8 方法对于颜色类型 2 图像崩溃。问题 27:在 Python 2.3 上失败。

发布 0.0.2

现在提供了可舔的 HTML 文档(参见 html/ 目录),由 Sphinx 生成。

已修复以下问题:

问题 8:文档不可舔。问题 9:相对于 PIL 的优势尚不清楚。问题 19:具有不受支持的 maxval 的 PNM 输入的虚假消息 问题 20:无法写入大型 PNG 文件

发布 0.0.1

事情发生了。

显现

  • .../ - 顶级 crud(比如这个 README 和 setup.py)。
  • .../asset - 资产(测试所需)
  • .../code/ - Python 代码。
  • .../man/ - 手册(源代码/纯文本)。
  • .../proc/ - 记录的程序(发布程序)。

参考

结尾