HiColor
(上图使用15位色彩)
HiColor 是一个用于将图像转换为15位和16位RGB色彩的程序和库,这是早期显示模式中被称为"高彩色"的色彩深度。我开发它是因为我想创建具有高彩色特征外观的图像。
目录
描述
HiColor 将图像压缩为两字节的15位或16位色彩。在15位模式下,图像的红、绿、蓝各有5位,最后一位保留。在16位模式下,人眼通常最敏感的绿色获得6位。
HiColor 实现了自己的简单文件格式,并在此格式和PNG之间进行转换。它还可以将标准PNG转换为仅包含高彩色值的标准PNG。(这模拟了通过HiColor的往返过程,无需创建临时文件。)HiColor 文件的扩展名为 .hic,或者15位用 .hi5,16位用 .hi6。
默认情况下,HiColor 应用拜耳有序抖动算法来减少量化误差(原始像素和高彩色像素之间的差异)。历史上的软硬件在高彩色模式下使用这种方法进行抖动。HiColor 也可以使用"a dither"算法替代。可以通过命令行标志选择或禁用抖动。
量化后的图像比原图更易压缩,因此HiColor可以作为256色pngquant的低损失替代方案。将PNG文件量化为PNG可以保留透明度(但不会量化alpha通道)。与HiColor格式的相互转换不保留透明度。
该程序用C语言编写,依赖极少,默认构建为静态二进制文件。已知可在Linux(aarch64、i386、riscv64、x86_64)、FreeBSD、NetBSD、OpenBSD以及Windows 98第二版、2000 SP4、XP、7和10上运行。
已知问题和限制
安全性
HiColor的命令行版本(非库版本)使用cute_png读取PNG文件。cute_png适用于可信输入。这意味着恶意构造的PNG文件可能会攻击HiColor CLI。为安全起见,只使用自己创建的PNG文件。对来自互联网的PNG文件使用可信程序重新压缩。
PNG文件大小
HiColor生成的PNG文件未经优化。通过OptiPNG或Oxipng处理可显著减小文件大小。
代际损失
使用拜耳抖动或无抖动时,初次量化后不会有代际损失。重复应用"a dither"会导致代际损失。测试表明,15位和16位模式下分别在32或64代后损失趋于零。
HiColor 0.1.0-0.2.1版本在使用拜耳抖动时由于实现错误存在代际损失。此错误在0.3.0版本中已修复。
使用方法
HiColor采用Git风格的命令行界面。 "encode"和"decode"操作可以在PNG和HiColor自有图像格式之间转换图像。 "quantize"将图像通过转换器来回处理,并输出标准的32位PNG。 使用它可以创建其他程序可读的高色彩图像。 "info"显示HiColor文件的信息:版本(15位为"5"或16位为"6")、宽度和高度。
HiColor 0.5.0
创建15/16位色RGB图像。
用法:
hicolor (encode|quantize) [-5|-6] [-a|-b|-n] [--] <源文件> [<目标文件>]
hicolor decode <源文件> [<目标文件>]
hicolor info <文件>
hicolor (version|help|-h|--help)
命令:
encode 将PNG转换为HiColor
decode 将HiColor转换为PNG
quantize 将PNG量化为PNG
info 打印HiColor图像版本和分辨率
version 打印程序版本
help 打印此帮助信息
选项:
-5, --15-bit 15位色
-6, --16-bit 16位色
-a, --a-dither 使用"a dither"对图像进行抖动
-b, --bayer 使用Bayer算法对图像进行抖动(默认)
-n, --no-dither 不对图像进行抖动
构建
Debian/Ubuntu
sudo apt install -y build-essential graphicsmagick tclsh
gmake test
交叉编译Windows版本
以下命令用于构建32位Windows可执行文件。
sudo apt install -y build-essential gcc-mingw-w64-i686
gmake hicolor.exe
# 仅在测试时需要Wine、Tcl和GraphicsMagick。
sudo apt install -y graphicsmagick tclsh wine
gmake test-wine
替代方案
我编写HiColor是因为似乎没有支持高色彩的工具。 但我错了。 实际上, FFmpeg、 GIMP 和 ImageMagick 都可以将图像降低到15位和16位色。 HiColor的独特之处在于它是一个小型专用工具和可嵌入的C库,并且有自己的文件格式。
许可证
MIT。
cute_png的版权归Randy Gaul所有,(c) 2019, 2021-2023,基于zlib许可证授权。
来自Unsplash的照片
“飞行中的飞机”(bordeaux-15bit.png
)由olaf wisser拍摄。
“树旁的房屋”(tests/photo.png
)由Orlova Maria拍摄。
许可证
Unsplash授予您不可撤销的、非独占的、全球性的版权许可,允许您免费下载、复制、修改、分发、表演和使用Unsplash的照片,包括商业用途,无需征得摄影师或Unsplash的许可或署名。此许可不包括将Unsplash的照片编译以复制类似或竞争服务的权利。