福利!Python製作動態字元畫(附原始碼)

松鼠愛出餅乾發表於2021-07-31

 

字元畫,一種由字母、標點、漢字或其他字元組成的圖畫。簡單的字元畫是利用字元的形狀代替圖畫的線條來構成簡單的人物、事物等形象,它一般由人工製作而成;複雜的字元畫通常利用佔用不同數量畫素的字元代替圖畫上不同明暗的點,它一般由程式製作而成。字元畫是網際網路時代的產物,通常應用於即時聊天中。

 

首先,也是最重要的,先放原始碼

from PIL import Image as im
from tkinter import *
import cv2
 
# 隨便打
codeLib = '''*.1'''
count = len(codeLib)
 
 
def transform(image_file):
    codePic = ''
    for h in range(0, image_file.size[1]):
        for w in range(0, image_file.size[0]):
            g, r, b = image_file.getpixel((w, h))
            gray = int(r * 0.299 + g * 0.587 + b * 0.114)
            codePic = codePic + codeLib[int(((count - 1) * gray) / 256)]
        codePic = codePic + '\r\n'
    return codePic
 
 
def image2char(image_file):
    image_file = image_file.resize((int(image_file.size[0] * 0.16), int(image_file.size[1] * 0.06)))  # 調整圖片大小
    return transform(image_file), image_file.size[0], image_file.size[1]
 
 
def frame2image(cap, i):
    cap.set(cv2.CAP_PROP_POS_FRAMES, i)
    _, b = cap.read()
    image = im.fromarray(cv2.cvtColor(b, cv2.COLOR_BGR2RGB))
    return image
 
 
def gui(path):
    cap = cv2.VideoCapture(path)
    root = Tk()
    t = frame2image(cap, 0)
    _, w, h = image2char(t)
    text = Text(root, width=w, height=h)
    text.pack()
    framenum = int(cap.get(7))
    for i in range(framenum):
        image = frame2image(cap, i)
        content, _, _ = image2char(image)
        text.insert(INSERT, content)
        root.update()
        text.delete(0.0, END)
 
 
if __name__ == '__main__':
    gui(r'C:\Users\Administrator\Desktop\油性極大.mp4')

 

然後,選擇一個短視訊

 

 

 

最後選擇視訊的路徑,修改程式碼的檔案路徑,在執行程式碼

 

 

 

程式碼有什麼不懂的地方可以在下面評論喲

相關文章