如何利用python实现图片转化字符画

 更新时间:2022年06月24日 16:21:50   作者:​ 诗一样的代码   ​  
这篇文章主要介绍了如何利用python实现图片转化字符画,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言:

字符画:字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

如果我们想要手工绘制出字符画,首先要有扎实的美术基础,其次还要花费大量的时间和精力。但是我们可以使用Python,只需要几行代码,就能够将一张图片轻而易举地转化为一个字符画。

实例1

效果图:

理论很简单,就是对图片操作,这里需要用到PIL的python包,里面有很好用的图像处理功能。

先打开图片,把图像调整大小:

img = Image.open(picPath)
img = img.resize((picW, picH))

然后读取灰度值,再把灰度值和字符对应起来就行。

from PIL import Image
lstChars = list("$@B%8&WM#*oahkbdpqwmZO0QLaCJUYXzczjhdhsdavunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'.") 
def oneChars(r, g, b, alpha = 256):
    global lstChars
    length = len(lstChars)
    gray = int(0.2126 * r + 0.7152 * g + 0.722 * b)
    index =length*gray
    return lstChars[index]
picPath = "C:\Users\Administrator\Desktop\\aaaaa\\aa.png"
picH = 40
picW =  80
img = Image.open(picPath)
img = img.resize((picW, picH))
txt = ""
for y in range(picH):
    for x in range(picW):
        txt += oneChars(img.getpixel((x, y)))
    txt += '\n'

print txt

实例2

下面是源码:

# -*- coding=utf-8 -*-
from PIL import Image
IMG = 'IMG.jpg'  # 设置图片文件
WIDTH = 150  # 设置字符画的宽
HEIGHT = 80  # 设置字符画的高
OUTPUT = 'T.txt'  # 设置存放字符画的文本文件
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")  # 设置显示的字符集
# 将256灰度映射到70个字符上
def get_char(r, g, b, alpha=256):
   # alpha为透明度
   # 判断 alpha 值,为0表示全透明
   if alpha == 0:
       return ' '
   # 获取字符集的长度,这里为 70
   length = len(ascii_char)
   # 将 RGB 值转为灰度值 gray,灰度值范围为 0-255
   gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
   # 灰度值范围为 0-255,而字符集只有 70
   # 需要进行如下处理才能将灰度值映射到指定的字符上
   # 防止当灰度值为255时,输出的第70个字符超出列表索引,所以需要将(255+1)
   unit = (255.0 + 1) / length
   # 返回灰度值对应的字符
   return ascii_char[int(gray / unit)]
if __name__ == '__main__':

   # 打开并调整图片的宽和高
   im = Image.open(IMG)
   im = im.resize((WIDTH, HEIGHT), Image.NEAREST)

   # 初始化输出的字符串
   txt = ""
   # 遍历图片中的每一行
   for i in range(HEIGHT):
       # 遍历该行中的每一列
       for j in range(WIDTH):
           # 将 (j,i) 坐标的 RGB 像素转为字符后添加到 txt 字符串
           txt += get_char(*im.getpixel((j, i)))
       # 遍历完一行后需要增加换行符
       txt += '\n'
   # 输出到屏幕
   print(txt)
   with open(OUTPUT, 'w') as f:
       f.write(txt)

直接粘贴即可,只需要在文件夹中导入一张图片重命名为IMG.jpg。运行结果会生成一个名为T.txt的文件。

原图:

生成文件图:

到此这篇关于如何利用python实现图片转化字符画的文章就介绍到这了,更多相关python字符画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中request库的各种用法详细解析

    Python中request库的各种用法详细解析

    本文详细介绍了Python的requests库的安装与使用,包括HTTP请求方法、请求头、请求体的基本概念,以及发送GET和POST请求的基本用法,同时,探讨了会话对象、处理重定向、超时设置、代理支持等高级功能,帮助读者更高效地处理复杂的HTTP请求场景,需要的朋友可以参考下
    2024-10-10
  • python多线程如何获取有序结果

    python多线程如何获取有序结果

    在Python中,多线程编程是一个常见需求,尤其是在处理I/O密集型任务时,然而,多线程环境下保持任务执行结果的顺序通常较为复杂,为了解决这一问题,可以通过封装一个功能来确保即使在多线程环境下,任务的执行结果也能按照一定的顺序进行收集和处理
    2024-09-09
  • 浅谈Pycharm调用同级目录下的py脚本bug

    浅谈Pycharm调用同级目录下的py脚本bug

    今天小编就为大家分享一篇浅谈Pycharm调用同级目录下的py脚本bug,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python-视频分帧&多帧合成视频实例

    python-视频分帧&多帧合成视频实例

    今天小编就为大家分享一篇python-视频分帧&多帧合成视频实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 8种Python异常检测算法总结

    8种Python异常检测算法总结

    异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。本文为大家整理了8个常见的Python异常检测算法,希望对大家有所帮助
    2023-02-02
  • python之yield和Generator深入解析

    python之yield和Generator深入解析

    这篇文章主要介绍了python之yield和Generator深入解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Matplotlib之解决plt.savefig()保存多张图片有重叠的问题

    Matplotlib之解决plt.savefig()保存多张图片有重叠的问题

    这篇文章主要介绍了Matplotlib之解决plt.savefig()保存多张图片有重叠的问题,具有很好的参考价值,希望对大家有所帮助,
    2023-09-09
  • 使用虚拟环境实现Python版本和依赖库的兼容

    使用虚拟环境实现Python版本和依赖库的兼容

    这篇文章主要介绍了使用虚拟环境实现Python版本和依赖库的兼容的相关资料,需要的朋友可以参考下
    2022-12-12
  • Pandas:DataFrame对象的基础操作方法

    Pandas:DataFrame对象的基础操作方法

    今天小编就为大家分享一篇Pandas:DataFrame对象的基础操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • pip安装指定版本的tensorflow的实现

    pip安装指定版本的tensorflow的实现

    本文介绍了如何使用pip安装指定版本的TensorFlow,包括CPU版本和GPU版本的安装方法,同时,文中也提到了使用阿里国内镜像源加速下载的方法,以及在安装GPU版本时需要检查CUDA和cuDNN的兼容性的注意事项,感兴趣的可以了解一下
    2024-10-10

最新评论