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

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

2020-02-18 | |  48 |   0

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

来源:CSDN博客      


下午有同学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 -*-nn')

        fp.write('import base64n')

        fp.write('from io import BytesIOnn')

        fp.write('content = """%s"""nn'%content)

        fp.write('def get_fp():n')

        fp.write('    return BytesIO(base64.b64decode(content.encode("utf8")))nn')

        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')

————————————————

版权声明:本文为CSDN博主「天元浪子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

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

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:“上岗”抗疫,人工智能如何“显神通”

下一篇:几个高效 Pandas 实用技巧

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 机器学习中的线性...

    机器学习中的线性回归是一种来源于经典统计学的有...

  • 基于Spark的数据分...

    Spark是在借鉴了MapReduce之上发展而来的,继承了...