phP imageMagic抠图,使用 Lua + ImageMagick 轻松批量抠图
最近準備做一個android手機游戲,但是手頭沒有圖片資源,于是就想著找些現成的拿來先用著。下載了一些apk用壓縮工具解壓出來找到了些比較合適的圖片,但這些圖片大都是把多張小圖拼接到一張大圖里,手動去摳圖不靠譜,于是想到了 ImageMagick,然后再配合靈巧的 Lua 事情就變得簡單多了。
在資源目錄找到了個和大圖配套的.plist配置文件,里面有很多類似這樣的配置:
cursor.png
aliases
spriteColorRect
{{0, 0}, {84, 85}}
spriteOffset
{0, -0}
spriteSize
{84, 85}
spriteSourceSize
{84, 85}
spriteTrimmed
textureRect
{{943, 172}, {84, 85}}
textureRotated
其中 textureRect 中記錄的就是小圖在大圖上的 rect 了,先使用Lua的正則表達式把它們提取出來,然后再利用 ImageMagick 的 convert -crop 命令將大圖上的這塊區域摳出來就可以了。完整的Lua代碼如下:
local plist_file = io.open("imgAll.plist", "r");
local plist_content = plist_file:read("*a");
plist_file:close();
if plist_content then
local images = {};
local pattern = "(.-)(.-)textureRect(.-){{(%d+), (%d+)}, {(%d+), (%d+)}}(.-)";
for key, _, _, x, y, w, h in string.gmatch(plist_content, pattern) do
if not images[key] then
images[key] = {x, y, w, h};
else
print("duplicate key: " .. key);
end
end
for k, v in pairs(images) do
local file_name = string.lower(k);
if string.sub(file_name, -4) ~= ".png" then
file_name = file_name .. ".png";
end
local crop_cmd = string.format([["D:\Program Files\ImageMagick-6.8.5-Q16\convert.exe" imgAll.png -crop %dx%d+%d+%d images\%s]], v[3], v[4], v[1], v[2], file_name);
os.execute(crop_cmd);
end
end 摳出的小圖會被放到images目錄(如果沒有的話需要先手動創建個)。
總結
以上是生活随笔為你收集整理的phP imageMagic抠图,使用 Lua + ImageMagick 轻松批量抠图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html下拉式日历,C#实现日历样式的下
- 下一篇: Appium自动化环境搭建