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目录(如果没有的话需要先手动创建个)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值