# 1.导入Image类
# 2.使用Image的对象读取图片
# 3.将图片转换为灰度图像
# 4.获取原图大小,并根据实际需要缩小图片
# 5.将缩小的图片像素点的颜色转换为字符并存储到列表
# 6.将保存像素字符列表写入到文件中
# 1.导入Image类
from PIL import Image
# 2.使用Image的对象读取图片
image_name = 'logo1.jpg';#图片的路径
img = Image.open(image_name)#打开图片并返回图片的对象
'''
print(img.size)#图片的尺寸
print(img.mode)#图片的模式 RGB彩色
'''
# 3.将图片转换为灰度图像
img = img.convert('L')#图片的模式 L灰色
#print(img.mode)
#img.show()#打开图片
#img.save('new_img.jpg')#保存图片并命名
# 4.获取原图大小,并根据实际需要缩小图片
width,height = img.size
# print(width)
# print(height)
#如果宽高太大,做等比缩放
if width > 100:
#height = int((100/width) * height)
height = int((100/width) * height / 2)
#如果高度不行,把高度缩小点,宽度不用改变(因为字符的高度导致)
width = 100
# print(width)
# print(height)
img = img.resize((width,height), Image.ANTIALIAS)
#改变图像的大小resize成100*64像素大小,
#Image.ANTIALIAS(滤镜)防止图片缩放的时候质量下降
# 5.将缩小的图片像素点的颜色转换为字符并存储到列表
data = []#保存像素字符的列表
#根据图片的宽高遍历像素点并取出像素点的颜色值
chars = [' ', ',', '1', '+', 'n', 'D', '@', 'M']
#替换字符的列表 从左到右颜色依次加深(区间去匹配)
#声明有八个字符,所以大概区间为8个每个区间大概为32
#'M'0-32)... ' '(222,255)大概值
#img.getpixel((50,35))#找到像素点
'''
print(img.getpixel((50,30)))#66
print(img.getpixel((50,35)))#255
print(img.getpixel((50,20)))#148
print(img.getpixel((50,10)))#254
'''
#用循环方式获取每个像素点
for i in range(0, height):
line = ''
for j in range(0, width):
pixel = img.getpixel((j, i))
# print(pixel)
# 用字符去替换像素点的颜色值
for k in range(0, 8):#range(0,8)<==>[0,1,2,3,4,5,6,7]
if pixel < (k + 1) * 32:
line += chars[7-k]
break
data.append(line)#将生产的字符写入到append中
# print(data)
# 6.将保存像素字符列表写入到文件中
filename = open(image_name+'.txt', 'w')#打开文件,如果没有会自动创建
for i in data:
print(i, file=filename)#没有加file参数是输出到控制台,如果加入后为写入文件
filename.close()
print('转换成功')
例子: