用Python怎样把图片转字符画,方法是什么
Admin 2022-10-31 群英技术资讯 1349 次浏览
在这篇文章中我们来了解一下“用Python怎样把图片转字符画,方法是什么”,一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
如果我们想要手工绘制出字符画,首先要有扎实的美术基础,其次还要花费大量的时间和精力。但是我们可以使用Python,只需要几行代码,就能够将一张图片轻而易举地转化为一个字符画。
效果图:


理论很简单,就是对图片操作,这里需要用到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
下面是源码:
# -*- 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的文件。
原图:

生成文件图:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在做需求过程中有一个对大量数据分块处理的场景,具体来说就是几十万量级的数据,分批处理,每次处理100个。这时就需要一个分块功能的代码。本文为大家分享了一个Python中优雅的数据分块方法,需要的可以参考一下
这篇文章主要介绍了OpenCV图像处理中常用的几个图像几何变换:裁剪、放大、缩小、平移、错切、镜像、旋转、透视等。文中示例代码非常详细,需要的朋友可以参考一下
这篇文章主要介绍了如何生成对角矩阵 numpy.diag,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
最近在做游戏自动化(测试),也就是游戏脚本了。主要有以下几个需求识别率百分百、速度要快、模型要小,本文就来着手实现它
要求给定指定的行、列以及对应的工作表作为参数,能够正确解析合并单元格,获取指定单元格的值。如果直接根据行列获取对应单元格的值,则合并单元格非左上角的其他单元格都会获取到None值。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008