您的位置:首页 > 编程语言 > Python开发

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

2020-03-06 21:13 1071 查看

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
中坑学编程 发布了2 篇原创文章 · 获赞 0 · 访问量 39 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: