2 个版本

0.1.1 2021 年 11 月 18 日
0.1.0 2021 年 10 月 2 日

#549 in 图像

MIT 许可证

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