近期,各位游戏开发者一直在头疼没有分割表的合图怎么拆开,如TexturePacker打包的合图,分割表文件丢失了怎么搞?
Unity弄出来的合图没有分割表文件怎么拆开?
为了满足广大开发者的需求,对于Java方面白的不能再白的我(Java中的变量是啥我都不懂的 -_-|| )写了个小工具,希望能解决各位的问题.
话不多说,直接开整.
先下载这个工具,下载地址:请点击此处
然后我已经将此项目的源代码上传至Github,有兴趣的朋友可以下载来研究下
项目地址: 请点击此处
关于具体的原理实现,我会在本文章的最后和大家分享一下,希望对大家有点帮助.
首先来张大图让各位观赏观赏,由于用Java编写,界面较丑,吐槽请自便 -_-|| .
下面,开始介绍具体用法
首先,选择你需要分割的合图文件,(png,jpg等等后缀名)
如图所示
选择好之后,你所选择的文件将会显示到窗口上
如图所示
图片选择好了之后,接下来就是选择裁剪后的图片保存路径了
单击 浏览....
选好了路径之后,接下来你可以直接点击 开始裁剪,不过有的小伙伴可能要改一下名称啊,后缀啥的,那么你们自己改吧,
具体修改的方式,比如我要改名称,就请将 "image_" 换成你想要的名字.
然后呢,起始数字,从0开始,有几张图片则分割后的图片名称依次为 image_0.png image_1.png .........image_N.png
如果你想把图片的后缀名改一下,那么请把 .png 换成你想要的后缀名,比如.jpg啥的,这里我就不截图了,各位自行实验吧.
那么,不扯了,开始切图,点击开始裁剪
如图所示
裁剪完成之后会有个提示,如果是在windows下进行裁剪操作,完成之后将会打开裁剪目录,
看图说话
至此,图片裁剪工作完成,接下来,你可以进行下一张图片的裁剪了
之前在文章开头说的这个工具的原理实现,现在和大家分享下我的想法和思路
大致思路,通过检测合图的alpha通道,也就是透明通道,因为合图中图片与图片中间隔着很大的透明像素,
我们可以通过检测这些像素来进行单张图片的区域判定,然后将图片裁剪下来
比如这是一张合图,合图上有很多小图片,图片之间有很多间隙,那些就是alpha通道 (简单说就是透明的)
然后,Java程序开始从这张合图的第一个像素开始检测,第一个像素的坐标点为原点, (0,0) ,简单说就是左上角
,然后依次往下检测,如图所示
检测其像素点是否为alpha(透明), 如果是透明的像素这说明此区域没有图片
如果检测到此像素点不是alpha,则此像素点事图片的区域
当检测到某一个像素点不是alpha的时候,就展开矩形,开始矩形推移算法
然后展开矩阵的是这样的
然后开始推移算法,首先判断矩阵的 a 边所在的像素是否全都是alpha通道,如果不是则a边向右推移一个像素,则 b 边和 c 边的像素单位则都需要加 1
然后依次类推,直到a边全部像素都检测到时alpha通道,然后开始b边的检测,之后是c边的检测,最后是d变得检测,直到四边所在的像素点都是alpha的时候,就能确定这一章小图的大致大小和裁剪范围了
四边都判断完之后是这样的
然后就可以将此区域裁剪下来,并输出为 .png文件,
输出之后将此区域全部换成alpha通道,以便下次检测时跳过该区域
然后进行下一次检测,检测在检测,直到检测的像素位大于此合图的宽度为止,这张图片就算裁剪完成了
好了,差不多弄完了,希望对大家有所帮助.