用python实现图片转字符画

曾经在网上看到有人把照片转换成字符组成的画,感觉很牛。现在在学完python后,期望自己尝试一下。
首先要了解三原色与灰度值的概念
图片是由无数像素点组成的那么,我们可以将像图片分为x,y轴组成的区间,每一个像素点就是一个坐标点。再把像素点按照其灰度值进行对应的映射不就可以了吗?
首先要先安装一个第三方的库:pillow
先来试验一下这个库的方法:

 from PIL import Image, ImageFilter
 #  缩放
 im = Image.open('66.jpg')
  获得图片大小
w,h = im.size
 im.thumbnail((w//2, h//2))
 im.save('56.jpg','jpeg')


 模糊滤镜
 im2 = Image.open('56.jpg')
im3 = im2.filter(ImageFilter.BLUR)
im3.save('566.jpg','jpeg')


进行了以上实验之后,我们开始进入正题。废话不多说,直接上代码:

from PIL import Image

str1 = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
count = len(str1)
print(count)
# 步骤:先将彩色图片转换为黑白图片,然后直接将每个像素点的灰度值与字符集进行映射
def bianhuan(image_file):
    image_file = image_file.convert('L')    #   先将图片黑白化
    codePic = ''
    for h in range(0, image_file.size[1]):
        for w in range(0, image_file.size[0]):
            gray = image_file.getpixel((w,h))                    #  遍历图片所有坐标点
            print(gray)
            codePic = codePic + str1[int(((count)*gray)/256)]        #   得到图片坐标点的对应灰度值,并与字符集映射
        codePic = codePic + '\r\n'
    return codePic
fp = open(u'123.jpg','rb')
image_file = Image.open(fp)
image_file = image_file.resize((int(image_file.size[0]*0.5),int(image_file.size[1]*0.25)))   #  调节图片大小

temp = open('saonian.txt','w')
temp.write(bianhuan(image_file))
temp.close()

在这里插入图片描述

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/an_ostrich/article/details/88768367