简单几行代码将图片变成字符图片

  初学编程,看到一个有意思的小项目,于是便拿来练习。其内容是将普通图片变成字符组成的图片,实现的较为简单的一种思路为:先将普通图片转换成像素值为0或255的黑白图像,再根据每一个像素的值得不同赋予不同的字符。
代码实现过程:
  本次需要用到pillow库,pillow库是Python中用于图像处理的库,具有强大的图像处理功能,Python3通过pip install pillow即可安装。当安装完pillow库后,首先要做的是导入Image模块from PIL import Image,接下来需要新建一个txt文本来存储由像素值转换成的字符txtfile = open('**.txt', 'w'),**替换成自己的文件名,下一步是打开需要转换成字符图片的图片im = Image.open('**.jpg').convert("1"),其中.open()用来打开图片,.convert("1")用来将图片格式转换成‘1’模式,此种模式下像素值变成0与255两个值,0代表黑色,255代表白色,Python中可通过.show()来查看转换后的图像。如下代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PIL import Image

im = Image.open('**.jpg').convert("1")
print(im.size)
im.show()

  其中print(im.size)会打印出图片的大小,单位为像素。im.show()会显示出转换后的图像,如下图,左为原始图像,右为通过im.show()显示出来的图像。im.show()显示的图像为转换成“1”模式后的图像,其像素值非黑即白:


  然后获取图像的长和宽用来遍历每个像素的值

HEIGHT = int(im.height)
WIDTH = int(im.width)

  根据图像的长和宽使用for循环遍历每一个像素并获取像素的值,代码如下:

for h in range(HEIGHT):
    txt = ''
    for w in range(WIDTH):
        pixel_value = im.getpixel((w,h))
        if pixel_value == 0:
            txt += '0'
        else:
            txt += ' '
    txt += '\n'
    txtfile.write(txt)
txtfile.close()

  需要注意的是txt = ''需要放在第一层循环下面,以便在第二次循环开始时将变量txt清空,否则txt中的字符将一直累加。
  其中.getpixel()用来获取元素的值,在此获取的是灰度图像的值,其值为0或255,当值为0也就是黑色的时候用数字0来代替,当值为255,也就是白色的时候,用空字符来代替。到此整个代码也就完成了。打开生成的txt文件就可以看到字符串组成的图像。初次打开可能因为字体过大图像不完整,可以将显示字体调到最小,便可看到生成的字符图像。


  此外,还可将图像转换成‘L’模式,即im = Image.open('**.jpg').convert("L")此时转换成的图像像素值为0-255之间的值,因此为了使生成的图像更丰富,可以根据像素值的不同划分成不同的像素值范围,并赋予不同复杂程度的字符例如“@#¥%~?

  以上便是代码的实现过程,仅作为学习过程中的记录。编程菜鸟,新手上路有点面,如有错误欢迎批评指正。
完整代码可在https://github.com/xiaozhhenu/Python_practice/blob/master/convert_txt中获取。

你可能感兴趣的:(简单几行代码将图片变成字符图片)