png2jxl:将 PNG 无损转换为 JPEG XL,并逐字节重建原始 PNG
摘要
png2jxl 是一个 Python 工具,它可以将 PNG 图像无损转换为 JPEG XL 格式,并允许完美重建原始 PNG 文件。
查看缓存全文
缓存时间: 2026/08/27 13:25
JiangJQ2000/png2jxl
来源:https://github.com/JiangJQ2000/png2jxl
png2jxl
png2jxl 可将支持的 PNG 图像转换为无像素损失的 JPEG XL,同时保留足够信息以逐字节重建原始 PNG。
安装
pip install -U png2jxl
Python API
from png2jxl import jxl_to_png, png_to_jxl
source = open("image.png", "rb").read()
archive = png_to_jxl(source)
assert archive is not None
assert jxl_to_png(archive) == source
编码和解码过程会自动与原始源文件进行验证。
若需拒绝大于原始 PNG 的转换结果:
archive = png_to_jxl(source, effort=10, only_if_smaller=True)
命令行
python -m png2jxl encode image.png # 输出 image.jxl
python -m png2jxl decode image.jxl # 输出 image.png
python -m png2jxl check image.jxl # 检查 pngr 信封
- 使用
-o/--output指定输出路径;否则自动替换文件扩展名。 - 不会覆盖已存在的输出文件。
encode支持--effort 1-10、--threads和--only-if-smaller参数。- 退出码:
0成功,1失败,2用法错误,3被--only-if-smaller拒绝。
Pillow 集成
导入 png2jxl 会扩展已注册的 JXL 保存处理器:
import png2jxl
from PIL import Image
with Image.open("image.png") as image:
image.save(
"image.png.jxl",
format="JXL",
png_reconstruction=True,
effort=10,
)
对于基于路径的 PNG 图像,原始字节从 image.filename 读取。对于从流打开或在内存中修改的图像,需通过 source_png=source 显式传递原始字节。
普通 JXL/JPEG 行为将继续委托给 pillow_jxl 处理。
支持的 PNG 类型
支持:
- 静态 8 位
L、LA、RGB和RGBA图像 - 带有效
PLTE和可选tRNS的 8 位索引色 PNG - PNG 过滤器 0–4
- 连续的
IDAT块
不支持:
- 1/2/4 位索引采样
- 16 位采样
- APNG
- 两个已用调色板条目对应相同 RGBA 有效颜色的索引图像
允许存在未使用的重复调色板条目。
限制与说明
公共函数接受不可变的 ResourceLimits 值。默认设置允许最多 1 GiB 输入/输出和 512 MiB 过滤明文或预压缩修正数据。
某些通用查看器在颜色、透明度或辅助元数据方面的行为可能受上游 pillow_jxl 编码器限制,即使原始 PNG 字节仍可重建。jxl_to_png 目前假设 JXL 输入可信,因为上游解码器在像素分配前不提供仅尺寸的预检查。
依赖项
pillow-jxl-plugin(https://github.com/Isotr0py/pillow-jpegxl-plugin) — JPEG XL 编码与解码preflate-rs(https://github.com/microsoft/preflate-rs) — 精确重建原始 DEFLATE 流
开发
相似文章
JPEG XL 发展之路:开源实验塑造了图像编码的未来
谷歌工程师回顾 JPEG XL 背后长达十年的开源历程,重点介绍了 WebP Lossless、Butteraugli 和 Guetzli 等关键实验如何塑造了下一代图像标准。
Firefox 157 将默认在所有平台上支持 JPEG XL
Firefox 157 计划在所有平台上默认启用 JPEG XL 解码,使用 jxl-rs Rust 库以提升性能并实现与其他图像格式的功能对等。
通过穷举搜索实现无损GIF压缩
博客文章探讨了通过对LZW编码进行穷举搜索来实现GIF图像的无损重新压缩,类似于PNG的Zopfli方法,以达到更小的文件大小。
JPEG 是如何工作的:交互式探索 JPEG 的有损压缩方法
一篇交互式文章,解释 JPEG 有损压缩的工作原理,涵盖色彩空间转换、频域、量化和编码步骤。
@Jolyne_AI: 跟大家安利一款好用的截图识别 AI 工具:Snippai。完全开源免费,识别稳、准、快。 不止能把图片里的文字和公式抠出来,还能读懂图像内容、把表格转成可用格式,甚至对截图里的题目直接给思路和答案。 GitHub:http://githu…
Snippai 是一款完全开源免费的截图识别 AI 工具,支持公式转 LaTeX、文字提取、表格转 Markdown、图像理解、截图解题、代码解释、色彩分析和截图翻译等功能。