自学Python笔记-1:图片转换字符图

操作系统: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()返回的值却不是列表,而只有一个值?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值