#data #color-space #pixel #convert-images #image #raw #img2raw

app img2raw-tools

将图像转换为原始像素数据

5 个版本

0.4.0 2020年1月29日
0.3.4 2019年12月27日
0.3.2 2019年11月29日
0.3.1 2019年11月13日
0.3.0 2019年10月20日

#48 in #color-space

MIT 许可协议

28KB
455

img2raw

此仓库提供了一个简单的命令行工具 img2raw,它接受任何支持的矢量图像格式(例如 PNG、JPEG、HDR 等)并将原始像素内容以扫描行顺序输出,格式如 RGBA8 或 R16F,适用于渲染应用程序。它支持基本的颜色空间转换,但不自动检测源颜色空间。目前不支持直接存储 MIP 级别。

默认情况下,该工具将输出原始像素数据,不输出其他内容,因此需要将额外的元数据关联到输出文件,以便在进一步的应用中使用。然而,该工具还支持在输出开始处写入一个简单的 16 字节头,包含数据宽度、高度、数据格式和颜色空间。此头可以通过此 crate 中的类型定义进行解析。如果存在,像素数据紧随其后。

此仓库分为两个 crate,img2rawimg2raw-tools。前者公开了解析生成的头的类型定义,与 no-std 兼容,具有可选的 zerocopy 功能(默认启用),并旨在在应用程序中使用,而后者提供命令行工具,可以通过 cargo 安装。

cargo install img2raw-tools

许可协议

此软件根据 MIT 许可协议提供。

理由

此工具的存在是由我经常需要将外部资产转换为适合快速高效加载到自己的渲染器中的图形 API 的格式所激发的,我不想在 google 中搜索神秘的 imagemagick 命令或不断地编写单独的图像转换器。它旨在成为一个简单、稳定且易于使用的程序,用于处理基本的二维 RGBA 数据并转换为多种已知格式。

支持格式

以下是目前支持的所有格式的表格,尽管添加更多格式也很容易。大多数格式具有 4 字节行对齐,以与常见的图形 API 兼容,但某些格式(如有适用性)具有“打包”变体,其中不会在每行的末尾插入填充字节。“RGBA”表示法仅指像素数据包含的抽象通道;数据可能不在 RGB 颜色空间中,甚至可能不是颜色,这取决于预期用途和目标应用程序。

数据格式 通道 组件数据类型 范围 行对齐 行填充 备注
R32F R 32位浮点数 (-∞, +∞) 4字节 从不
RG32F RG 32位浮点数 (-∞, +∞) 4字节 从不
RGBA32F RGBA 32位浮点数 (-∞, +∞) 4字节 从不
R16F R 16位浮点数 (-∞, +∞) 4字节 0或2字节
PackedR16F R 16位浮点数 (-∞, +∞) 2字节 从不 R16F 的打包变体。
RG16F RG 16位浮点数 (-∞, +∞) 4字节 从不
RGBA16F RGBA 16位浮点数 (-∞, +∞) 4字节 从不
R8 R 8位定点数 [0, 1] 4字节 0到3字节
RGBA8 RGBA 8位定点数 [0, 1] 4字节 从不
PackedR8 R 8位定点数 [0, 1] 1字节 从不 R8 的打包变体。
RGBE8 RGBA 8位共享指数 (0, +∞) 4字节 从不 RGBE编码,alpha通道包含指数。
BC1 RGB (块压缩) [0, 1] 不适用 不适用 图像尺寸应该是4的倍数。
RG8 RG 8位定点数 [0, 1] 4字节 0或2字节

目前,源像素数据被静默限制到输出格式的范围内,并且不关注浮点无穷大或NaN。未来版本可能会记录警告。

支持的颜色空间

颜色空间支持非常简约,实际上是最基本的,以便知道实际写入的颜色数据类型。它支持伽玛校正的sRGB、线性sRGB和CIE XYZ颜色。非颜色数据也通过不处理图像像素数据并直接写入来“支持”。要使用非颜色路径,请使用 NonColor “颜色空间”,对于源和输出都是逻辑错误。

颜色空间 描述
NonColor 像素数据不包含颜色信息。
CIEXYZ 使用D65发光体的CIE XYZ 1931颜色空间。
SRGB 按照IEC 61966-2-1:1999定义的sRGB颜色空间。
LinearSRGB 未经过伽玛校正的sRGB颜色空间,即线性。

依赖

~9MB
~141K SLoC