10个版本

0.4.0 2020年1月29日
0.3.5 2020年8月7日
0.3.4 2019年12月27日
0.3.1 2019年11月13日
0.1.1 2019年10月5日

#768 in 图像

每月下载量:35
img2raw-tools 中使用

MIT 许可证

12KB
94

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字节 从不 PackedR16F的打包变体。
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字节 从不 PackedR8的打包变体。
RGBE8 RGBA 8位共享指数 (0, +∞) 4字节 从不 RGBE编码,alpha通道包含指数。
BC1 RGB (块压缩) [0, 1] N/A N/A 图像尺寸应为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颜色空间,即线性。

依赖

~3MB
~58K SLoC