操作系统:Windows
Python版本:3.8.1
需要导入模块:PIL(pillow)
涉及的函数:
Image.open():打开需要转换的图片
object.resize():重设图片大小(可选)
object.getpixel():获取图片像素的RGB值以及ALPHA值
主要思路:
1、通过PIL的Image.open()打开通过PIL的Image.open打开需要转换的图片;
2、使用object.resize()将图片进行缩小,图片太小的话,可忽略此步骤;
3、利用object.getpixel()获取像素值,返回值为(r,g,b)或(r,g,b,alpha),其中alpha为像素的透明度;
4、通过公式转换成灰度图片,并把不同的灰度值,根据字符码的数量进行划分,转换成对应的字符;
5、将字符按行列存放于变量,并输出
源代码如下:
from PIL import Image #导入PIL中的Image模块
#--------定义将灰度值转成对应字符的函数-----------
def get_char(r,g,b,alpha=256):
if alpha == 0: #透明像素转换为空格
return ' '
charlist = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") #需要用到的字符码,最后一定要为空格以转换白色
length = len(charlist) #可用于转换字符的数量
gray = int(0.2126*r + 0.7152*g + 0.0722*b) #RGB转换成灰度
unit = (256+1)/length #根据可用字符量对灰度进行划分
return charlist[int(gray/unit)] #按灰度等级划分转换成对应的字符
#---------------函数定义到此结束------------------
#---------------以下读取图片像素------------------
img = Image.open('1.png') #通过image读取图片
img = img.resize((40,40),Image.NEAREST) #缩小图片至40x40,并降低图片质量Image.NEAREST(可选参数)
#------------调用转换函数获取字符图---------------
pixel = '' #先设置pixel为空
for i in range(0,40): #行
for j in range(040): #列
pixel += get_char(*img.getpixel((j,i))) #将新的像素转字符后,递加到pixel内
pixel += '\n' #行末结束,换行
print(pixel) #输出
示例图片:
转换效果:
过程中,曾遇到的问题,仍然未得到解决:
同一段代码,相同版本的python,在windows上运行没有问题,但在mac os 10.11上img.getpixel()返回的值却不是列表,而只有一个值?