用户:
Leo韩查看:3 回复:20 评论:3 创建时间:2020-06-21T07:33:34
嘿大家好,我是蜷缩在少院士墙角的萌新Leo韩,今天我就来教大家如何用python来生成字符画吧~首先看一下效果:
原图
处理后的图
(本图是三叶大佬的头像23333)
然后直接上代码
from PIL import Image,ImageDraw
import matplotlib.pyplot as plt
width,height=(60,60)
name1 = input("请输入待处理文件的文件名(包括格式):")
img = Image.open(name1).convert('L').resize((width,height))
plt.rcParams["image.cmap"]="gray"
ASCII_HIGH = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!1i;:,\"^`'. '''
txt=""
for y in range(height):
for x in range(width):
pos = (x,y)
gray = img.getpixel(pos)
index = int(gray/256*70)
txt += ASCII_HIGH[index]+" "
txt+="\n"
with open("处理结果.txt","w") as f:
f.write(txt)
img_new = Image.new("RGB",(width*12,height*15),"white")
draw = ImageDraw.Draw(img_new)
draw.text((0,0),txt,fill="black")
plt.imshow(img_new)
plt.show()
上完代码我就来解释一下,
首先如果你想要运行这个程序,
需要安装Pillow库以及Matplotlib库
安装方法有两种
第一种是可以在cmd里安装(具体方法百度)
第二种是可以下载“海龟编辑器”然后在“库管理”里面安装~
我选的是第二种。
下面开始正式解析代码:
前两行是把这两个库给导入进去(plt是我定义的简称,你们可以自己自定义哦~)
然后就是这一行:
width,height=(60,60)
如果你还不太熟悉python,那么你可能看到这里是一脸懵圈,那么我就来解释一下:这一行代码大致意思就是把width变量以及height变量同时设置为60,免得还需要再写一行代码(对,Leo就是这么懒2333)
然后的那几句太简单的代码就不再讲了,有不理解的可以一起交流哦~
重点来了(敲黑板)(代码中的变量名省略了):
''' $@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!1i;:,\"^`'. '''
这一行代码就很重要了(社区显示的代码颜色有点不对,下面我来写一下)
''' $@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!1i;:,\"^`'. ''' 绿色的就是三引号,三引号可以把较长的文本储存下来,方便阅读 粉色的部分就是整个程序的重点之一啦~ 眼尖的训练师一定发现了:这里的字符正好是字符画里的字符! 对的, 这就是等会转字符画中间必不可少的那行代码! 少了它,将无法转成字符画!!! 这里的循环代码for y in range(height):
for x in range(width):
pos = (x,y)
gray = img.getpixel(pos)
index = int(gray/256*70)
txt += ASCII_HIGH[index]+" "
txt+="\n"
就是先把图片转成灰色,然后再找到每一个像素对应的字符(刚才说的那个长字符串起到作用了吧~)
下面这里就是常规操作:
with open("处理结果.txt","w") as f:
f.write(txt)
这行代码的实际用处是 在你保存这个py文件的路径下会生成一个字符画的txt文件,方便你向小伙伴炫耀(大雾)
(这行代码很简单就不多说了哈)
img_new = Image.new("RGB",(width*12,height*15),"white")
draw = ImageDraw.Draw(img_new)
draw.text((0,0),txt,fill="black")
这里的代码仍然是常规操作,就是创建一个画布,,然后显示(显示需要看下面的代码)我们刚才的画(但是到这里仍然仍然没有显示出来,这是因为你少加了下面的代码
plt.imshow(img_new)
plt.show()
这行代码就是显示我们刚才弄的字符画哦~)
最后,给大家发一下这个程序的py文件(蓝奏云网盘不限速,链接是它的)
https://leohan.lanzous.com/idLPtdw21ha
(链接好像是院士讲堂2333打错字了对不起哈(懒到不想修改)
本期少院士讲堂就到这里啦~
大家可以将帖子转发给别人哦~~~
学了几个月的Python小佬的水平:
import os
from PIL import Image
import matplotlib.pyplot as plt
m='BCM'
fs=os.listdir(m)
print(fs)
ie=[".png",".jpg",".bmp",".jpeg",".gif"]
I=[]
for f in fs:
n=os.path.splitext(f)[0]
e=os.path.splitext(f)[-1]
if e in ie and 'bcm' in n:
ii=Image.open(m+os.sep+f)
_i=ii.resize((300,300))
I.append(_i)
#print(I)
s=[[0,1,0,1,0],
[1,1,1,1,1],
[1,1,1,1,1],
[0,1,1,1,0],
[0,0,1,0,0]]
c=5
r=5
b=Image.new('RGBA',(300*c,300*r))
for i in range(r):
for j in range(c):
if s[i][j]==1:
iii=j+c*i
b.paste(I[iii%len(I)],(j*300,i*300))
#plt.imshow(b)
#plt.show()
b.save('heart.png')
效果:
大佬觉得呢
点赞1
评论
時分#是3d游戏哦 from ursina import * from ursina.prefabs.\ first_person_controller \ import FirstPersonController
app = Ursina() Sky(texture='sky_sunset') player = FirstPersonController()
boxes = [] for n in range(30): for k inrange(30): box = Button( color=color.blue, model='cube', position=(k, 0, n), texture='assets\grass', parent=scene, origin_y=0.5, ) boxes.append(box)
definput(key): for box in boxes: if box.hovered: if key == 'left mouse down': new = Button( color=color.red, model='cube', position=box.position + mouse.normal, texture='assets\grass', parent=scene, origin_y=0.5, ) boxes.append(new) if key == 'right mouse down': boxes.remove(box) destroy(box)
sword = Entity( model='blade', texture='assets\sword', rotation=(30, -40), position=(0.5, -0.6), parent=camera.ui, scale=(0.2, 0.15) )
def update(): if held_keys['left mouse']: sword.position = (0.4, -0.5) elif held_keys['right mouse']: sword.position = (0.4, -0.5) else: sword.position = (0.5, -0.6)
app.run()
点赞0
评论