用Python寫(xiě)一個(gè)圖片整合工具(后記)

上一個(gè)文章的末尾留下一個(gè)問(wèn)題,就是如何有效地利用空間。其實(shí)那時(shí)候?qū)懲曜詈笠恍械臅r(shí)候,我腦海里面浮現(xiàn)的是knapsack——如何在有限的空間里面裝最大價(jià)值的物品;但是回頭仔細(xì)一想,發(fā)現(xiàn),這個(gè)問(wèn)題和最優(yōu)問(wèn)題毫無(wú)關(guān)聯(lián)。因?yàn)槲疑傻膱D片沒(méi)有限定空間,圖片可以無(wú)限制的往下延伸,所以我只需要把中間的空白給填滿就行了。
于是就有了以下的代碼(我還在源代碼的基礎(chǔ)上做了一些功能性調(diào)整):
算上空白行一共72行,依舊非常簡(jiǎn)潔,不愧是Python。
在這里我用一個(gè)greedy的方法,將一張一張的圖片往低處填,就像是玩俄羅斯方塊那樣。
但是這個(gè)greedy的辦法不是最好的,因?yàn)樵O(shè)想我有100張小圖片和1張超長(zhǎng)圖片,如果超長(zhǎng)圖片最后一個(gè)放下去,那么他就會(huì)占用非常多的額外空間,因此,事先對(duì)所有圖片的長(zhǎng)度從大到小進(jìn)行排序,然后再一個(gè)一個(gè)放下去會(huì)更好。
最后在計(jì)算完每一個(gè)圖片的位置之后,用numpy生成一個(gè)大矩陣,然后將所有數(shù)據(jù)對(duì)號(hào)入座。
THE END.
標(biāo)簽: