简易合图工具

在游戏开中常常要使用各类大小不一的小图片,把这些小图片拼合成一张大图,不只有利于减小IO的读取操做次数,并且有利于兼容不支持任意大小纹理的显卡设备。下面我提供一种拼合的方法。python

实现使用的是python3.x加PIL库,能够在这里下载源代码:git

https://github.com/plumsky/mergeImageToolgithub

说下实现的思路:python3.x

将全部须要拼合的图片打开,获取其长度和宽度。找出能够放下全部图片的大图图片大小,而且保证大图的大小是2的N次幂。这里肯定大图大小的方法采用的是全部小图面积之和、大图的大小大于任何小图大小的方式肯定出来的。对于一些特殊的小图,这种肯定方式可能会出现错误,好比小图有不少又长又细和又高又窄的图片时,会形成图片没法拼合下的问题。建议能够把图片拼成两张,又长又细一张,又高又窄放另一张。spa

肯定好大图尺寸后,下面就能够开始拼图了。我这里提供了两种拼图的方式,一种是以宽度优先的方式,另一种是以高度优先的方式,具体采用那种方式,彻底取决于最后的图片效果是怎样的,对程序上来讲其实区别不大,只要能把全部小图都拼下。排序

下面以宽度优先的方式讲述下拼图的过程。将全部小图宽度从大到小排序,当第一张小图放在大图的左上角以后,将余下的空区域划分红两个矩形区域,即图所示:游戏


而后将第二张小图与空区域进行比较,放得下就放下,而后移除使用的空区域,将余下的空区域划分红两个新的矩形空区域:图片

余下图片以上方式依次操做,直到全部图片都拼下了为止。高度优先的方式跟上面的方法雷同,能够查看源代码一看。get


你们若是还有好的拼图方法,能够探讨一下。it

相关文章
相关标签/搜索