png2jxl:将 PNG 无损转换为 JPEG XL,并逐字节重建原始 PNG

Lobsters Hottest 工具

摘要

png2jxl 是一个 Python 工具,它可以将 PNG 图像无损转换为 JPEG XL 格式,并允许完美重建原始 PNG 文件。

<p><a href="https://lobste.rs/s/oqlhod/png2jxl_convert_png_lossless_jpeg_xl_with">评论</a></p>
查看原文
查看缓存全文

缓存时间: 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 位 LLARGBRGBA 图像
  • 带有效 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 流

开发

相似文章

通过穷举搜索实现无损GIF压缩

Hacker News Top

博客文章探讨了通过对LZW编码进行穷举搜索来实现GIF图像的无损重新压缩,类似于PNG的Zopfli方法,以达到更小的文件大小。

@Jolyne_AI: 跟大家安利一款好用的截图识别 AI 工具:Snippai。完全开源免费,识别稳、准、快。 不止能把图片里的文字和公式抠出来,还能读懂图像内容、把表格转成可用格式,甚至对截图里的题目直接给思路和答案。 GitHub:http://githu…

X AI KOLs Timeline

Snippai 是一款完全开源免费的截图识别 AI 工具,支持公式转 LaTeX、文字提取、表格转 Markdown、图像理解、截图解题、代码解释、色彩分析和截图翻译等功能。