Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/zhs007/texturepackerjs


https://github.com/zhs007/texturepackerjs

Last synced: 8 days ago
JSON representation

Awesome Lists containing this project

README

        

# TexturePackerJS
TexturePacker是一个很好用的软件,但我们有一些特殊需求,不太方便用TexturePacker,所以就想自己写一个纯命令行的,需求所限,不会有那么强大的功能,够用就好。

关于NodeJS的图像库
---
NodeJS并没有好用而且全的图像库,当然这里说的是能把图像解开到内存中,能操作像素数据的那种。

NodeJS有个gm的库,可以通过gm命令行做很多图形操作,大部分需求其实可以通过这个来实现。

最开始的想法很简单,libpng、libjpeg这些其实都可以很方便的跨平台使用,npm上确实也有这样的库,但现在貌似几乎都编译不了了,github上看起来作者也没有维护来着。

从我们的需求来看,速度不是一个很大的问题,所以就找了一堆原生js的图片读取库,这种一般来说,就算版本升级,大部分也都是可以用的。

关于算法
---
TP的算法做得算是不错的了,我们尽可能的接近TP就好了,肯定是要切除纯透明区域,然后有一个间隔,然后有一定的图像旋转,最后拼出来的图片越小越好。图片大小也有一些限制,譬如2的整数次幂这种,有可能会要求高度宽度一样。

具体算法就是在一定规则下,穷举,选一个最优解出来就行。

批量文件重命名
---
指望美术出图按命名规范是一件很难的事,所以我们还增加一个批量命名功能。

```
texturepackerjs rename **/*.png %d.png
```

这个命令,会遍历当前目录的所有子目录,按不同目录将文件重命名成``%d.png``,这里可以使用``%03d.png``之类的。

每个目录会重新计数。

目录展开
---
因为最终需要拼图,为了底层引擎遍历更高效,我们会希望将目录展开,保证每个文件名不一样。

譬如最开始的目录结构是:

```
npc/idle/000.png
npc/idle/001.png
npc/act/0000.png
npc/act/0001.png
```

我们可以变成

```
npc_idle_000.png
npc_idle_001.png
npc_act_0000.png
npc_act_0001.png
```

这样是不是很方便呢?