从零开始的明日方舟python脚本创作(七)b64转换模块

简介

b64转换模块是为了解决图片资源可以被打包成的问题。我个人所查找到的资料只有python文件的多文件打包,不能将图片包含进去。所以在这里选择了将图片转换成文本内容存储到python文件格式的文件里面。在查询相关资料时,发现大家通常将图片以二进制形式读取后还以base64格式进行了一次转码,然后以字符类型存储或者传输。在网络传输中以base64进行传输可以避免一些错误的产生,便于网络传输,因为经过base64编码过后的字符都是可见字符,而且是ASCII字符(某些系统不支持非ASCII字符)。而本地如果不经过base64转码,在进行图片文件写入的时候就会因为里面的字符串里面的“/”之类的导致报错。

引入的包

import base64#python自带的
import sys#python自带的

完整代码

import base64#python自带的
import sys#python自带的

nameLength=10
filePath=sys.argv[0]

def pictopy(picture_names, py_name):
    write_data = []
    for picture_name in picture_names:
	    filename = picture_name
        #'rb'以二进制的方式读取文件 b64encode操作对象为byte类型
	    open_pic = open(filePath[0:-11]+"/images/"+picture_name+".png", 'rb')
        #b64encode 对原bytes进行b64编码转换 返回byte类型
	    b64str = base64.b64encode(open_pic.read())
	    open_pic.close()
	    #file.write写入字符类型数据,需要对byte类型使用decode进行转换 
        #此处转换的是经过b64编码后的数据,以二进制形式读取写入的数据之后还需进行b64解码
	    write_data.append('%s = "%s"\n' % (filename, b64str.decode()))
    f = open(filePath[0:-nameLength-1]+'/%s.py' % py_name, 'w+')
    for data in write_data:
    	f.write(data)
    f.close()
    
if __name__ == '__main__':
    pics = ["ActingCommander","StartGame","RoundEnd","AcceptRefresh","RefuseRefresh"]
    pictopy(pics, 'memory_pic')	 # 将pics里面的图片写到 memory_pic.py 中

nameLength:本python脚本文件的名字长度,比如这里的名字是“pictopy.py”总长度为10位,为了获取同目录下的其他文件或者文件夹那么就要读取到倒数第11位。
filepath:当前脚本所在的绝对路径。

注意事项

write_data.append(’%s = “%s”\n’ % (filename, b64str.decode())) 执行这里如果不对b64编码的数据进行一次UTF-8转码(decode默认以UTF-8的方式转码)的话,会导致写入的字符串会带入一些额外信息——当前数据的类型。如下图:
在这里插入图片描述在这里插入图片描述
b代表写入之前的数据是byte类型数据,这会对后面的解码工作造成一定的麻烦,为了减少这种麻烦,所以进行一次转码还是很有必要的。

总结

这个脚本里面,我们将图片信息转换成了字符串信息保存在了python文件里面,后续在打包完成后,就可以通过引用这个保存了图片信息的文件,经过转换把字符串信息再次转换成一张张图片。我把这个步骤放在了核心模块里面。以上,祝好!

你可能感兴趣的:(python,python)