在遊戲開中常常要使用各類大小不一的小圖片,把這些小圖片拼合成一張大圖,不只有利於減小IO的讀取操做次數,並且有利於兼容不支持任意大小紋理的顯卡設備。下面我提供一種拼合的方法。python
實現使用的是python3.x加PIL庫,能夠在這裏下載源代碼:git
https://github.com/plumsky/mergeImageToolgithub
說下實現的思路:python3.x
將全部須要拼合的圖片打開,獲取其長度和寬度。找出能夠放下全部圖片的大圖圖片大小,而且保證大圖的大小是2的N次冪。這裏肯定大圖大小的方法採用的是全部小圖面積之和、大圖的大小大於任何小圖大小的方式肯定出來的。對於一些特殊的小圖,這種肯定方式可能會出現錯誤,好比小圖有不少又長又細和又高又窄的圖片時,會形成圖片沒法拼合下的問題。建議能夠把圖片拼成兩張,又長又細一張,又高又窄放另一張。spa
肯定好大圖尺寸後,下面就能夠開始拼圖了。我這裏提供了兩種拼圖的方式,一種是以寬度優先的方式,另一種是以高度優先的方式,具體採用那種方式,徹底取決於最後的圖片效果是怎樣的,對程序上來講其實區別不大,只要能把全部小圖都拼下。排序
下面以寬度優先的方式講述下拼圖的過程。將全部小圖寬度從大到小排序,當第一張小圖放在大圖的左上角以後,將餘下的空區域劃分紅兩個矩形區域,即圖所示:遊戲
而後將第二張小圖與空區域進行比較,放得下就放下,而後移除使用的空區域,將餘下的空區域劃分紅兩個新的矩形空區域:圖片
餘下圖片以上方式依次操做,直到全部圖片都拼下了爲止。高度優先的方式跟上面的方法雷同,能夠查看源代碼一看。get
你們若是還有好的拼圖方法,能夠探討一下。it