首页 > 数据库 > 数据库开发技术 > 带音乐字符画+带颜色字符画—情人节表白代码
最近奥运会开得如火如荼,奥运健儿吸引了我所有的目光。所以公众号就暂时搁置了,随着奥运会结束,公众号也是该回阳的时候了
。
昨天是一年一度的七夕,很多小伙伴都度过了一个甜蜜的日子。
没有另一半的也不要气馁呀,好好提升自己,相信在不久的将来,你也会遇到自己生命中那个唯一的伴侣
。
带音乐字符画和带颜色字符画效果展示
1.1 带颜色字符画效果展示
1.2 带音乐字符画效果展示
带颜色字符画生成过程
2.1 下载要转换成字符的视频
2.2 把视频中固定间隔的帧取出来做成图片
2.3 把视频中截取的图片转成字符图片
2.4 把转成字符的图片连接起来生成动图
带音乐字符画生成

之前看到有人在微博上用一些软件生成了树开花的视频,总想着下次我也要用python实现玩玩。
终于在研究了一段时间后实现了,感谢网上前辈一些资料的提示,大家也可以借由这篇文章的灵感,实现属于你的字符画
。
在正式进入代码讲解之前,先来看下本文的实现效果。
1 带颜色字符画效果展示
视频中的字符可以替换成你想替换的名字缩写,我用的是杨紫的首字母缩写。
2 带音乐字符画效果展示
视频中的字符可以替换成你想替换的名字缩写,在开始和结束页可以把你想说的话替换固定字符,也可以是你写的一封信。

带颜色字符画的大致生成过程:确定视频——把视频中固定间隔的帧截取出来生成带颜色的字符图片——合并成字符画gif。
若需要从网上下载没有下载按钮的视频,分享大家如下方法。
1 下载要转换成字符的视频
首先在视频播放页面按F12(或者点击页面右上方红框中的三个点,找到更多工具,再点击开发人员工具)。
接着点击带箭头的红框,再点击要下载的视频,右边会自动定位。



最后把下载好的视频,存到特点目录即可。
import osimport cv2import numpy as np# 导入所需要的库os.chdir(r'F:\公众号\36.彩色字符号')#设置视频存放的地址 ***需替换成你电脑存放视频的文件目录***video_capture = cv2.VideoCapture("rose.mp4")# 读取视频文件 ***需替换成你的视频名称***success, frame = video_capture.read()timeF = 5#设置固定帧率,视频每隔多少秒打印一下图片i = 0j = 0while success :i = i + 1if (i % timeF == 0):j = j + 1address = 'image' + str(j)+ '.jpg'cv2.imwrite(address,frame)#存储图片#print('save image:',j)success, frame = video_capture.read()
这个代码也可以应用到工作中,比如把视频中的内容截取出来,再自动识别出图片中的文字,做某种校验。
#-*- coding:utf-8 -*-import osimport cv2import timeimport argparseimport numpy as npimport pygame as pyfrom tkinter import *import matplotlib.pyplot as pltfrom PIL import Image, ImageFont, ImageDraw# 导入所需要的库os.chdir(r'F:\公众号\36.彩色字符号')#设置存放文件的路径ascii_char = list(u"YZILVU")#替换成你喜欢的字符def get_char(r,g,b,alpha = 256):#将像素转换为ascii码if alpha == 0:return ''length = len(ascii_char)gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)unit = (256)/lengthreturn ascii_char[int(gray/unit)]if __name__=='__main__':for k in range(1, j):im = cv2.imread('image' + str(k)+ '.jpg',1)im = im[110:im.shape[0],0:im.shape[1]]cv2.imwrite('cut' + str(k)+ '.jpg',im)im =Image.open('cut' + str(k)+ '.jpg')WIDTH = int(im.width/4.5)HEIGHT = int(im.height/7)im_txt = Image.new("RGB",(im.width,im.height),(231,223,223))im = im.resize((WIDTH,HEIGHT),Image.NEAREST)txt = ""colors = []for i in range(HEIGHT):for j in range(WIDTH):pixel = im.getpixel((j,i))colors.append((pixel[0],pixel[1],pixel[2]))if(len(pixel) == 4):txt += get_char(pixel[0],pixel[1],pixel[2],pixel[3])else:txt += get_char(pixel[0],pixel[1],pixel[2])txt += '\n'colors.append((0,0,0))dr = ImageDraw.Draw(im_txt)font=ImageFont.load_default().font#获取字体x=y=0#获取字体的宽高font_w,font_h=font.getsize(txt[1])font_w *= 0.8font_h *= 0.7 #调整后更佳#ImageDraw为每个ascii码进行上色for i in range(len(txt)):if(txt[i]=='\n'):x+=font_hy=-font_wdr.text([y,x],txt[i],colors[i])y+=font_w#输出im_txt.save(r'.\videos_to_str_png\vedio_to_str_' + str(k)+ '.png', encoding='utf-8')#plt.imshow(im_txt)
import osimport imageiodef turn_gif(path, gif_filename):print('=====开始制作GIF=====')os.chdir(path)image_list = []num = len(os.listdir(path))for i in range(1,num-1):image_list.append('vedio_to_str_' + str(i)+ '.png')frames = []for image_name in image_list:frames.append(imageio.imread(image_name))imageio.mimsave(gif_filename, frames, 'GIF', duration=0.01)print('=====GIF已制作完成=====')turn_gif(r'F:\公众号\36.彩色字符号\videos_to_str_png', 'rose_video_to_str_gif.gif')
最终生成的效果图即为第一小节里介绍的视频1。

带音乐字符画生成过程和带颜色字符画生成过程类似,就不赘述了,有疑问的同学可以到公众号中私信我,本文直接把代码展示如下:
import osimport cv2import numpy as np# 导入所需要的库os.chdir(r'F:\公众号\35.七夕字符画')#设置视频存放的地址 ***需替换成你电脑存放视频的文件目录***video_capture = cv2.VideoCapture("rose.mp4")success, frame = video_capture.read()timeF = 10i = 0j = 0while success :i = i + 1if (i % timeF == 0):j = j + 1address = 'image' + str(j)+ '.jpg'cv2.imwrite(address,frame)#存储图片#print('save image:',j)success, frame = video_capture.read()import osimport cv2import timeimport numpy as npimport pygame as pyfrom tkinter import *from PIL import Image# 导入所需要的库os.chdir(r'F:\公众号\35.七夕字符画')#ascii_char = list("$@杨%8&紫我#*喜欢你杨紫我喜欢你杨紫/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")ascii_char = list("$@B%8&WM#*yzyzyzyzwmZO0QLCJUYXzsyfurmflp/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")#将256灰度映射到70个字符上,也就是RGB值转字符的函数:def get_char(r, g, b, alpha=256):if alpha == 0:return ''length = len(ascii_char)gray = int(0.2126*r + 0.7152*g +0.0722*b)unit = (256.0 + 1)/lengthreturn ascii_char[int(gray/unit)]width = 60height = 45if __name__=='__main__':root = Tk()text = Text(root, width = 60, height = 45)text.pack()text.insert(INSERT, '时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;时光往复,爱你如初;')py.mixer.init()py.mixer.music.load(r'.\videos\轻音乐舒缓 (钢琴).mp3')py.mixer.music.play(-1, 0)root.update()text.delete(10.0, END)for k in range(1, j):img = cv2.imread('image' + str(k)+ '.jpg',1)im = img[110:img.shape[0],0:img.shape[1]]cv2.imwrite('cut' + str(k)+ '.jpg',im)im =Image.open('cut' + str(k)+ '.jpg')im = im.resize((width, height),Image.NEAREST)txt = ''for i in range(height):for j in range(width):txt += get_char(*im.getpixel((j,i))) #获得相应的字符txt += '\n'#print(txt, end='') #打印出字符画#time.sleep(1)text.insert(INSERT, txt)root.update()text.delete(0.0, END)text.insert(INSERT, '花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期;花开有期,爱你无期。')root.update()text.delete(0.0, END)
注:如需本文直接可执行的代码和图片,请到公众号中回复”python字符画“即可免费获取。
至此,python生成字符画已展示完毕,感兴趣的朋友自己实现一遍吧,可以发挥你的创意生成个性化的表白字符画,给他/她一份独一无二的礼物。
参考文献
https://zhuanlan.zhihu.com/p/144256746https://www.jb51.net/article/155379.htmhttps://blog.csdn.net/qq_29726359/article/details/86774759https://blog.csdn.net/qq_40502460/article/details/115293269https://blog.csdn.net/sinat_29957455/article/details/85145488https://blog.csdn.net/ljx1400052550/article/details/107410157https://haokan.baidu.com/v?pd=wisenatural&vid=4882005920557419484https://blog.csdn.net/qq_27802435/article/details/82423062?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.base&spm=1001.2101.3001.424


扫一扫关注我
13162366985
投稿微信号、手机号
原文作者:阿黎逸阳的代码;如有侵权,请联系管理员删除。