ITPub博客

首页 > 数据库 > 数据库开发技术 > 带音乐字符画+带颜色字符画—情人节表白代码

带音乐字符画+带颜色字符画—情人节表白代码

原创 数据库开发技术 作者:阿黎逸阳的代码 时间:2021-08-15 23:32:18 0 删除 编辑

最近奥运会开得如火如荼,奥运健儿吸引了我所有的目光。所以公众号就暂时搁置了,随着奥运会结束,公众号也是该回阳的时候了。

昨天是一年一度的七夕,很多小伙伴都度过了一个甜蜜的日子。

没有另一半的也不要气馁呀,好好提升自己,相信在不久的将来,你也会遇到自己生命中那个唯一的伴侣。

本来想昨天把这篇文章送给大家,但是昨天要出门看望一个生病的朋友,所以就拖到今天啦,希望大家喜欢。

本文目录
  1. 带音乐字符画和带颜色字符画效果展示

    1.1 带颜色字符画效果展示

    1.2 带音乐字符画效果展示

  2. 带颜色字符画生成过程

    2.1 下载要转换成字符的视频

    2.2 把视频中固定间隔的帧取出来做成图片

    2.3 把视频中截取的图片转成字符图片

    2.4 把转成字符的图片连接起来生成动图

  3. 带音乐字符画生成


一、带音乐字符画和带颜色字符画效果展示

之前看到有人在微博上用一些软件生成了树开花的视频,总想着下次我也要用python实现玩玩。

终于在研究了一段时间后实现了,感谢网上前辈一些资料的提示,大家也可以借由这篇文章的灵感,实现属于你的字符画。

在正式进入代码讲解之前,先来看下本文的实现效果。

 1   带颜色字符画效果展示

视频中的字符可以替换成你想替换的名字缩写,我用的是杨紫的首字母缩写。


 2   带音乐字符画效果展示

视频中的字符可以替换成你想替换的名字缩写,在开始和结束页可以把你想说的话替换固定字符,也可以是你写的一封信。


二、带颜色字符画生成过程

带颜色字符画的大致生成过程:确定视频——把视频中固定间隔的帧截取出来生成带颜色的字符图片——合并成字符画gif。

若需要从网上下载没有下载按钮的视频,分享大家如下方法。

 1   下载要转换成字符的视频

首先在视频播放页面按F12(或者点击页面右上方红框中的三个点,找到更多工具,再点击开发人员工具)。

接着点击带箭头的红框,再点击要下载的视频,右边会自动定位。

然后点击鼠标右键,点击编辑为HTML,即可出现下图中的大红框,再复制小红框src中的链接。


在浏览器中打开,再点击右下角的三个点,即可出现下载按钮。

最后把下载好的视频,存到特点目录即可。


 2   把视频中固定间隔的帧截取出来生成图片
把刚刚下载好的视频存放到电脑某个文件夹中,并让下面代码中的路径和存储路径一致即可。
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 + 1 if (i % timeF == 0): j = j + 1 address = 'image' + str(j)+ '.jpg' cv2.imwrite(address,frame) #存储图片 #print('save image:',j) success, frame = video_capture.read()

这个代码也可以应用到工作中,比如把视频中的内容截取出来,再自动识别出图片中的文字,做某种校验。


 3   把视频中截取的图片转成字符图片
由于视频是在好看视频中下载的,所以图片右上方会带有特定字符。本文对图片进行了截取,处理了那些特殊字符,并把处理好的图片转换成字符图片。
#-*- 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)/length return 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.8 font_h *= 0.7 #调整后更佳
#ImageDraw为每个ascii码进行上色 for i in range(len(txt)): if(txt[i]=='\n'): x+=font_h y=-font_w dr.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)

 4   把转成字符的图片连接起来生成动图
最后是把生成的字符图片连接成gif,输出到本地文件夹中。感兴趣的同学可以思考怎么不保存图片,直接生成gif。
import osimport imageio
def 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 + 1 if (i % timeF == 0): j = j + 1 address = '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)/length return ascii_char[int(gray/unit)]
width = 60 height = 45 if __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
往期回顾:

情人节表白烟花

520表白代码合集
黑客帝国中的代码雨
用python绘制皮卡丘
娱乐圈排行榜动态条形图绘制
Python人脸识别—我的眼里只有你
3D星空图V2版——添加背景图片和音乐


扫一扫关注我

13162366985

投稿微信号、手机号

原文作者:阿黎逸阳的代码;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-02-15

  • 博文量
    282
  • 访问量
    130906