合图分割工具SpriteSplit

    近期,各位游戏开发者一直在头疼没有分割表的合图怎么拆开,如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通道,以便下次检测时跳过该区域




然后进行下一次检测,检测在检测,直到检测的像素位大于此合图的宽度为止,这张图片就算裁剪完成了


好了,差不多弄完了,希望对大家有所帮助.


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值