2 个版本
0.1.1 | 2021 年 11 月 18 日 |
---|---|
0.1.0 | 2021 年 10 月 2 日 |
#549 in 图像
31KB
717 行
塔特拉普
纹理图集打包器库/命令行工具。
我知道市面上有很多这样的工具,但我没有找到一款能满足我所有需求的
- 裁剪透明边框
- 删除重复项
- 处理非 4 通道图像
我还想找到一个学习 Rust 的项目,制作命令行工具是一个完美的选择。
示例
将三张图像合并成纹理图集
$ tatlap sprite1.png sprite2.png sprite3.png
您可以指定输出名称(默认为 out
)
$ tatlap --out sprites data/*.png
如果您有很多图像需要打包,可以将它们的名称放入文件中
$ tatlap --file list_of_sprites.txt
或者通过标准输入传递
$ echo 'sprite1.png sprite2.png sprite3.png' | tatlap --stdin
实际上我不确定为什么我还需要 --file
选项,因为您可以使用以下方法完成此操作
$ tatlap < list_of_sprites.txt
您还可以从之前创建的纹理图集中加载图像
$ tatlap --atlas out newsprite.png
您还可以从图集中删除重复图像
$ tatlap *.png --dedup
输出
塔特拉普将输出一个 out.txt
文件,一个 out.bin
文件,以及几个 outN.png
文件,其中 N
是图像包含的通道数。
.txt
输出文件包含打包精灵的位置。
例如
4 459 638 45 37 69 53 192 192
4
- 这代表图像具有的颜色通道数。459 638
- 这些是精灵被打包到结果纹理图集中时的 x 和 y 像素坐标45 37
- 这是裁剪透明边框后的精灵尺寸67 53
- 这是从左上角裁剪的像素数192 192
- 裁剪前的图像尺寸
输出文件 .bin
包含与 .txt
输出相同的数据,但将值序列化存储在二进制文件中。第一个值(每像素字节数)是一个字节,其余的是 16 位无符号整数(小端序),因此每张图像占用 17 个字节。
如何使用 .txt
和 .bin
由您决定;我发现 .bin
在加载精灵时更实用。以下是一个用 C 语言加载它的示例:
FILE* fp = fopen("out.bin");
uint8_t bpp;
fread(&bpp 1, 1, fp);
uint16_t d[8];
fread(&xywh, 2, 8, fp); // Note that this won't work on big-endian systems
// Extract the sprite based on d[0-4]
// Calculate where to draw the sprite centered on `x` and `y`
// x - half uncropped width + cropped offset
int draw_x = x - d[6]/2 + d[4];
int draw_y = y - d[7]/2 + d[5];
依赖项
~9MB
~146K SLoC