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