脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python实现将图片转换为ASCII字符画

Python实现将图片转换为ASCII字符画

2022-08-15 20:55小小明-代码实体 Python

这篇文章主要介绍了Python实现将图片转换为ASCII字符画,要将图片转换为字符图其实很简单,我们首先将图片转换为灰度图像,这样图片的每个像素点的颜色值都是0到255,然后我们选用一些在文字矩形框内占用面积从大到小的ASCI

前言

要将图片转换为字符图其实很简单,我们首先将图片转换为灰度图像,这样图片的每个像素点的颜色值都是0到255,然后我们选用一些在文字矩形框内占用面积从大到小的ASCII码字符,我经过一番观察选择了如下字符:

ascii_chars = "MNHQ$OC67+>!:-. "

很明显M的笔画比N多,缩小到足够小之后就会体现出M的颜色比N更深,大家若能够找到更能够体现这种特征的字符,也可以替换。

然后我们只需要将图片的目标像素点映射到这批字符上,代码大概就是:

ascii_chars[color*(len(ascii_chars)-1)//255]

 

字符画图片生成

先准备好测试图片:

from PIL import Image
img = Image.open("test.jpg")
img

Python实现将图片转换为ASCII字符画

然后我们将图片转换为灰度图片并缩放到指定大小:

new_w = 100
w, h = img.size
img = img.convert("L").resize((new_w, int(new_w*h//w)))
w, h = img.size
data = img.load()
img

Python实现将图片转换为ASCII字符画

然后开始绘制字符图片:

from PIL import ImageFont, ImageDraw

f_size = 3
img_new = Image.new("L", (w * f_size, h * f_size), 255)
f = ImageFont.truetype("arial.ttf", f_size)
d = ImageDraw.Draw(img_new)
n = len(ascii_chars)-1
for y in range(h):
    for x in range(w):
        char = ascii_chars[data[x, y]*n//255]
        d.text((x * f_size, y * f_size), char, fill=0, font=f)
img_new

Python实现将图片转换为ASCII字符画

个人感觉效果还是不错的,我们可以把上述逻辑封装成一个方法:

from PIL import Image, ImageFont, ImageDraw
def img2charImg(filename, new_wight, font_size):
    "小小明:https://blog.csdn.net/as604049322"
    ascii_chars = "MNHQ$OC67+>!:-. "
    img = Image.open(filename)
    w, h = img.size
    img = img.convert("L").resize((new_wight, int(new_wight*h//w)))
    w, h = img.size
    data = img.load()
    img_new = Image.new("L", (w * font_size, h * font_size), 255)
    f = ImageFont.truetype("arial.ttf", font_size)
    d = ImageDraw.Draw(img_new)
    n = len(ascii_chars)-1
    for y in range(h):
        for x in range(w):
            char = ascii_chars[data[x, y]*n//255]
            d.text((x * font_size, y * font_size), char, fill=0, font=f)
    return img_new

测试一下:

img2charImg("love.jpg", 200, 2)

效果:

Python实现将图片转换为ASCII字符画

分别是原图和执行结果:

Python实现将图片转换为ASCII字符画

我们可以通过第二个参数调大字符程度,最终图片的宽度是两个参数相乘。

 

字符画文字的生成

搞定了字符图片的生成之后,我们考虑直接生成字符文字,但是ASCII码字符在显示时,往往宽度是高度的一半,所以我们在生成字符画文字时需要事先将图片高度压扁一半。

完整代码如下:

from PIL import Image

def img2charTxt(filename, new_wight, txtname):
    "小小明:https://blog.csdn.net/as604049322"
    ascii_chars = "MNHQ$OC67+>!:-. "
    img = Image.open(filename)
    img = img.convert("L")
    w, h = img.size
    img = img.resize((new_wight*2, int(new_wight*h//w)))
    w, h = img.size
    data = img.load()
    result = []
    n = len(ascii_chars)-1
    for y in range(h):
        line = "".join(ascii_chars[data[x, y]*n//255] for x in range(w))
        line += "
"
        result.append(line)
    with open(txtname, "w") as f:
        f.writelines(result)

测试一下:

img2charTxt("test.jpg", 100, "image.txt")

Python实现将图片转换为ASCII字符画

可以看到在文本编辑器中的显示效果是相当不错的。

到此这篇关于Python实现将图片转换为ASCII字符画的文章就介绍到这了,更多相关Python图片转换ASCII字符画内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/as604049322/article/details/126336169

延伸 · 阅读

精彩推荐
  • PythonPython的getattr函数方法学习使用示例

    Python的getattr函数方法学习使用示例

    这篇文章主要为大家介绍了Python的getattr方法学习使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    waws5204992022-08-10
  • PythonPython加密word文档详解

    Python加密word文档详解

    这篇文章主要介绍了Python实现对word文档添加密码去除密码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    滑稽研究所4522021-12-22
  • Python通过Python 接口使用OpenCV的方法

    通过Python 接口使用OpenCV的方法

    下面小编就为大家分享一篇通过Python 接口使用OpenCV的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    man_world11502021-01-26
  • PythonPython pandas之求和运算和非空值个数统计

    Python pandas之求和运算和非空值个数统计

    数据处理的过程中经常会遇到判断空值和求和运算的需求,所以下面这篇文章主要给大家介绍了关于Python pandas之求和运算和非空值个数统计的相关资料,需要...

    不思量自难忘5842021-12-17
  • PythonPython与R语言的简要对比

    Python与R语言的简要对比

    这篇文章主要介绍了Python与R语言的简要对比,小编觉得还挺不错的,这里分享给大家,需要的朋友可以了解下。...

    大虾卢3062020-12-17
  • PythonPython yield 使用浅析

    Python yield 使用浅析

    这篇文章主要介绍了Python yield 使用浅析,本文给出了多个使用实例来分析yield的使用方法,需要的朋友可以参考下...

    Python教程网2492020-07-09
  • Python在Python程序和Flask框架中使用SQLAlchemy的教程

    在Python程序和Flask框架中使用SQLAlchemy的教程

    SQLAlchemy为Python程序与SQL语句之间建立了映射,是Python操作数据库的利器,这里我们将来看在Python程序和Flask框架中使用SQLAlchemy的教程,需要的朋友可以参考下...

    人世间3112020-08-25
  • Pythonpytorch 中autograd.grad()函数的用法说明

    pytorch 中autograd.grad()函数的用法说明

    这篇文章主要介绍了pytorch 中autograd.grad()函数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    waitingwinter11262021-10-28