Python小技巧:将图像音视频等资源文件隐藏在代码中

举报
天元浪子 发表于 2021/07/27 00:25:25 2021/07/27
【摘要】 下午有同学Python学习群里说,使用pyinstaller打包源码时,因为代码中使用了图像、音频、视频等资源文件,无法将程序打包成单一的可执行文件。有没有方法将这些资源文件按保存在代码中呢?我想了一下,应该是可以的。于是乎,花了一个小时,写出了下面的代码,算是抛砖引玉吧。 这段代码可以将二进制文件转存为python脚本文件,供其他脚本引用。代码最后附有使用的例子,演...

下午有同学Python学习群里说,使用pyinstaller打包源码时,因为代码中使用了图像、音频、视频等资源文件,无法将程序打包成单一的可执行文件。有没有方法将这些资源文件按保存在代码中呢?我想了一下,应该是可以的。于是乎,花了一个小时,写出了下面的代码,算是抛砖引玉吧。

这段代码可以将二进制文件转存为python脚本文件,供其他脚本引用。代码最后附有使用的例子,演示用的图片可以随便照一张。除了转存二进制数据,还提供了两个方法:

  • get_fp():返回二进制的IO对象(类文件对象)
  • save():保存为本地文件
# -*- coding: utf-8 -*-

"""以python模块形式存储、使用二进制文件"""

import os
import base64
from io import BytesIO

def bin2module(bin_file, py_file=None): """二进制文件转存为python模块 bin_file - 二进制文件名 py_file - 生成的模块文件名,默认使用二进制文件名,仅更改后缀名 """ fpath, fname = os.path.split(bin_file) fn, ext = os.path.splitext(fname) if not py_file: py_file = os.path.join(fpath, '%s.py'%fn) with open(bin_file, 'rb') as fp: content = fp.read() content = base64.b64encode(content) content = content.decode('utf8') with open(py_file, 'w') as fp: fp.write('# -*- coding: utf-8 -*-\n\n') fp.write('import base64\n') fp.write('from io import BytesIO\n\n') fp.write('content = """%s"""\n\n'%content) fp.write('def get_fp():\n') fp.write(' return BytesIO(base64.b64decode(content.encode("utf8")))\n\n') fp.write('def save(file_name):\n') fp.write(' with open(file_name, "wb") as fp:\n') fp.write(' fp.write(base64.b64decode(content.encode("utf8")))\n') if __name__ == '__main__': """测试代码""" # 将图像文件转存为img_demo.py bin2module('forever.png', 'demo.py') # 导入刚刚生成的demo模块 import demo # 用pillow打开图像,验证demo模块的get_fp():返回二进制的IO对象(类文件对象) from PIL import Image im = Image.open(demo.get_fp()) im.show() # 保存为本地文件,验证demo模块的save():保存文件 demo.save('demo_save.png')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

文章来源: xufive.blog.csdn.net,作者:天元浪子,版权归原作者所有,如需转载,请联系作者。

原文链接:xufive.blog.csdn.net/article/details/104332523

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。