91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何將圖像音視頻等資源文件隱藏在代碼中(小技巧)

發布時間:2020-10-05 03:51:01 來源:腳本之家 閱讀:200 作者:天元浪子 欄目:開發技術

下午有同學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')

補充:下面看下Python實現將視頻按間隔截取為圖片(附代碼)

輸入:一段視頻。

輸出:取出的視頻幀。

準備:新建一個文件夾,用來放置截出來視頻幀。

代碼實現:

import cv2
import argparse
import os
def parse_args():
  """
  Parse input arguments
  """
  parser = argparse.ArgumentParser(description='Process pic')
  parser.add_argument('--input', help='video to process', dest='input', default=None, type=str)
  parser.add_argument('--output', help='pic to store', dest='output', default=None, type=str)
  #default為間隔多少幀截取一張圖片
  parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=100, type=int) #此處可更改提取幀的間隔
  args = parser.parse_args(['--input','','--output',''])  #此處添加路徑,input為輸入視頻的路徑 ,output為輸出存放圖片的路徑
  return args
def process_video(i_video, o_video, num):
  cap = cv2.VideoCapture(i_video)
  num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
  expand_name = '.jpg'
  if not cap.isOpened():
    print("Please check the path.")
  cnt = 0
  count = 0
  while 1:
    ret, frame = cap.read()
    cnt += 1
    # how
    # many
    # frame
    # to
    # cut
    if cnt % num == 0:
      count += 1
      cv2.imwrite(os.path.join(o_video, str(count) + expand_name), frame)
    if not ret:
      break
if __name__ == '__main__':
  args = parse_args()
  if not os.path.exists(args.output):
    os.makedirs(args.output)
  print('Called with args:')
  print(args)
  process_video(args.input, args.output, args.skip_frame)

運行起來非常容易,若是出錯請檢查 路徑書寫 是否正確。如下是一種絕對路徑的寫法舉例,前方加 r。

args = parser.parse_args(['--input', r'F:\data_video\IMG_4395.MOV', '--output', r'F:data_rgb_\video_to_frame'])

總結

以上所述是小編給大家介紹的Python如何將圖像音視頻等資源文件隱藏在代碼中(小技巧),希望對大家有所幫助!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清徐县| 凤阳县| 鄂托克前旗| 麻栗坡县| 七台河市| 舟山市| 灵武市| 随州市| 突泉县| 康保县| 宾阳县| 平山县| 南召县| 伊宁县| 耿马| 高青县| 竹溪县| 静宁县| 高台县| 柏乡县| 界首市| 吉安县| 平阳县| 绥中县| 安吉县| 涞源县| 延庆县| 玉溪市| 桃源县| 万荣县| 新化县| 东乌珠穆沁旗| 宁波市| 鹤岗市| 哈密市| 万州区| 哈尔滨市| 宜兰县| 长葛市| 陇西县| 永定县|