WNJXYK
Thanks to the cruel world.
WNJXYKのBlog
RPG Maker系列行走图分割
RPG Maker系列行走图分割

RPG Maker系列行走图都是4\times 3的组合图,如果需要使用Texture Packer进行多图合并的时候。就需要先对它们进行分割,然后再在其中拼合。

特别是RM2000与RM2003系列的图片都是索引格式,有单调的底色,在分割的时候也需要将底色扣去变成透明的。

工作量实在是太大了,于是写了一个Python脚本进行自动识别底色+分割,基于PIL库,底色默认为(0, 0)位置的颜色,暴力扣掉与底色相同的像素,然后按照行列的有效像素进行降维,然后对连续的存在有效像素的区间进行分割。

脚本使用方法:python split.py 图片路径 保存名称

from PIL import Image
import sys

def divImage(n, cnt, ans):
    last = -1
    for i in range(0, n):
        if cnt[i]!=0 and last==-1:
            last=i
        if cnt[i]==0 and last!=-1:
            ans.append((last, i))
            last = -1
    if last!=-1:
        ans.append((last, n-1))
        last=-1

def main(path, export_base_name, export_base_type):
    img = Image.open(path)
    img = img.convert("RGBA")

    (w, h) = img.size
    print("Image Size %dx%d" % (w, h))

    background_color = img.getpixel((0, 0))
    print("Backgound ", background_color)

    wr = [0 for x in range(0, w)]
    hr = [0 for x in range(0, h)]
    for y in range(0, w):
        for x in range(0, h):
            pixel = img.getpixel((y, x))
            if pixel != background_color:
                wr[y] = wr[y] + 1
                hr[x] = hr[x] + 1

    wd = []
    hd = []
    divImage(w, wr, wd)
    divImage(h, hr, hd)
    print("%d Rows %d Columns" % (len(hd), len(wd)))

    for i in range(0, len(hd)):
        for j in range(0, len(wd)):
            im = img.crop((wd[j][0], hd[i][0], wd[j][1], hd[i][1]))

            raw = im.getdata()
            upd = []
            for pixel in raw:
                if pixel == background_color:
                    upd.append((255, 255, 255, 0))
                else:
                    upd.append(pixel)
            im.putdata(upd)

            export_name = ("%s_%d_%d.%s" % (export_base_name, i, j, export_base_type))
            im.save(export_name)

#####                        #####
#    Split Image By Blank Area   #
#    1. Image Path               #
#    2. Export Name              #
#    3. Export Type              #
#####                        #####
if __name__=="__main__":
    if len(sys.argv)<3 :
        print("Require Image Params.")
    else :
        main(sys.argv[1], sys.argv[2], 'PNG')
赞赏
https://secure.gravatar.com/avatar/f83b57c055136369e9feba5d6671d6b5?s=256&r=g

WNJXYK

文章作者

一个蒟蒻

发表评论

textsms
account_circle
email

WNJXYKのBlog

RPG Maker系列行走图分割
RPG Maker系列行走图都是$$4\times 3$$的组合图,如果需要使用Texture Packer进行多图合并的时候。就需要先对它们进行分割,然后再在其中拼合。 特别是RM2000与RM2003系列的图片都是索引…
扫描二维码继续阅读
2018-08-21
<--! http2https -->