python学习 image2str

# 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('转换成功')

例子:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值