python 一键换icon

Cocos 原生Android经常需要替换icon,在Android项目中的icon一般都放在 res 文件夹中的子项中,手动替换需要对比大小,再拷贝.

此脚本是在Android项目res同级目录下,需要替换的icon也需要拷贝到同级目录下

思路:先去res中递归找需要替换的icon,找到后,获取icon大小,再去需要替换的icon库中找相同大小的icon

   删除源路径的icon,再将icon库的图片拷贝到该目录下

   修改拷贝后的icon的名字

目前使用到的是 pillow 库

#!usr/bin/python3

# -*- coding=utf8 -*-

import os
import shutil
from PIL import Image

#width,height,name

iconfile = r'icon'
resfile = r'res'
logfile = open('log.txt','w',encoding='utf-8')

def readiconfile(iconpath,respath,resw,resh):
    for file in os.listdir(iconpath):
        fs = os.path.splitext(file)
        file_path = os.path.join(iconpath,file)
        if '.png' == fs[1]:
            img = Image.open(file_path)
            width,height = img.size
            img.close()
            if resw == width and resh == height:
                logfile.write("readiconfile remove respath:" + respath + '\n')
                copyafname = respath + '\\' + file
                rename = respath + '\\' + 'icon.png'
                os.remove(rename)
                shutil.copy(os.path.join(iconpath,file),respath)
                logfile.write("copyafname:" + copyafname + '\n')
                logfile.write("rename:" + rename + '\n')
                os.rename(copyafname,rename)
            

def readres(path):
    for file in os.listdir(path):
        file_path = os.path.join(path,file)
        logfile.write("readres file_path:" + file_path + '\n')
        if os.path.isdir(file_path):
            readres(file_path)
        else:
            fs = os.path.splitext(file)
            if 'icon' == fs[0] and '.png' == fs[1]:
                img = Image.open(file_path)
                width,height = img.size
                img.close()
                readiconfile(iconfile,path,width,height)

if __name__ == '__main__':
    readres(resfile)
    logfile.close()

这里在读取需要替换的icon的时候使用的是每次都会去循环找一次,但是没有找到怎么存储它的方法。所以只能用最挫的代码先解决问题。

原来想的是有没有像二维数组一样的内容来存储icon信息,这样只要读取一次就可以了,后面再改

问题:

  1、使用img=Image.open()之后需要关闭,否则会提示该文件正在使用

  2、路径都是相对脚本文件所在位置的绝对路径,而且操作中记得路径的拼接

 

优化遍历,使用字典嵌套的方式

#!usr/bin/python3
#coding=utf-8

import os
from PIL import Image

if __name__ == '__main__':
    respath = r'切图'
    logfile = open('log.txt','w',encoding='utf-8')
    resdict = {}
    rescount = 0
    for file in os.listdir(respath):
        res_filepath = os.path.join(respath,file)
        print(res_filepath)
        im = Image.open(res_filepath)
        width,height = im.size
        im.close()
        filedict = {}
        filedict['width'] = width
        filedict['height'] = height
        filedict['filepath'] = res_filepath
        resdict[rescount] = filedict
        rescount = rescount + 1
        #print(filedict)
    
    #print
    for k in resdict:
        logfile.write('width:%s,height:%s,filepath:%s\n' % (resdict[k]['width'],resdict[k]['height'],resdict[k]['filepath']))
    logfile.close()

 

posted @ 2021-05-24 23:11  天星铁甲堂  阅读(351)  评论(0)    收藏  举报