Python字符画生成详解

  • 字符画的原理
  • 方案设计
    •  设计思路
    •  整体流程
  • 代码实现
  • 成品展示
  • 提示

字符画的原理

  顾名思义,字符画就是由字符组成的画
  日常我们在网上看到的彩色图片一般有3个颜色通道:R(红)、G(绿)、B(蓝)。你没看错,就是初中物理你学过的那个“色光三原色,以此构成颜色鲜明的图片。

  而当绘图的颜色只有一种的情况下,如素描的时候,则通过线条颜色的密集程度不同进行明暗区分,即灰度值区分。

  同理,对于字符画,我们也可以根据字符笔画的密集程度进行字符画的明暗区分,以此实现对字符画各部分的灰度区分。

方案设计

 设计思路

  首先,每个字符中线条的密集程度进行排序,用于生成字符画时的明暗区分。这里我采用的字符是"MNHQ$OC?7>!:-; ",各位可以更具自己的需求进行更改。
  基础的字符画是单色画,既然如此,我们则没必要针对彩色图片进行方案设计,可以将图片将图片整体修改为灰色,根据灰色图片中每个像素点的灰度值将对应像素替换成对应字符。
  考虑到一般情况下,一个字符的高度大于它的宽度,并且每行字符之间都会有固定的间隙,为了保证最终成品的与原图的宽高比,可以将转换后的灰图的宽度进行拉伸,用于抵消由于字符宽高不一致和行间间隙造成的误差。

  然后,生成一个和灰图相同的数组 pixels,遍历 pixels每个像素,根据该像素的灰度获取对应字符并进行拼接,最后返回拼接后字符串。

 整体流程

  1. 设置字符串chars用于区分不同灰度。
  2. 通过PIL(需安装pillow)的Image包读取img并进行图片宽度拉伸。
  3. 将img转换为灰图。
  4. 使用numpy生成与img相同的数组pixels。
  5. 定义空串result。
  6. 循环遍历pixels像素点,获取该像素灰度在chars中对应的字符,并将该字符拼接至result,一行遍历完成后拼接换行符。
  7. 返回result。

代码实现

import numpy as np
from PIL import Imagedef chars_image(path, result_path, widen, chars):img = Image.open(path)  # 获取图片img_width, img_height = img.size  # 获取图片原始宽高# img_width, img_height = img_width // 10, img_height // 10 #根据需求进行压缩img_width = int(img_width * widen)  # 图片宽度拉伸,拉伸程度根据图片大小自行修改img = img.resize((img_width, img_height), Image.ANTIALIAS)  # 修改图片尺寸img = img.convert("L")  # 将图片转换为灰图pixels = np.array(img)  # 生成img的copy数组pixelsN = len(chars)step = 256 // Nresult = ""for i in range(img_height):for j in range(img_width):index1 = pixels[i][j] // step  # 获取灰度对应字符result += chars[index1]  # 字符拼接result += "\n"  # 一层遍历完成后添加换行符with open(result_path, "w", encoding="utf-8") as f:f.write(result)if __name__ == '__main__':chars_image(path="./img.png", result_path="./result.txt", widen=1.8, chars="MNHQ$OC?7>!:-; ")

成品展示

原图

成品图

提示

如果遇到以下这种由于字符宽度不一致导致成品效果差的情况。

将显示字体修改为Courier或Courier New后缩小即可。

修改后

Python字符画生成详解相关推荐

  1. Python Turtle 海龟绘图详解官方文档中文版

    Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...

  2. python:基础知识详解

    一.基本元素 变量 变量赋值: a="hello world" 变量命名: • 字母:a-z, A-Z, 其他语言的字母符号 • 数字:0-9 (不可以出现在首字符) • 下划线: ...

  3. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  4. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  5. python图书馆管理系统实验报告_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  6. 信息学奥赛 python 教程_Python在信息学竞赛中的运用及Python的基本用法(详解)

    前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在<算法竞赛入门经典-训练指南>中所说的一样,如果会用 ...

  7. python中rstrip 函数,Python rstrip()方法实例详解

    Python 字符串 描述 Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格). 语法 rstrip()方法语法: str.rstrip([chars]) 参数 c ...

  8. Python内置函数详解——总结篇

      引 言 国庆期间下定决心打算学习Python,于是下载安装了开发环境.然后问题就来了,怎么开始呢?纠结一番,还是从官方帮助文档开始吧.可是全是英文啊,英语渣怎么破?那就边翻译边看边实践着做吧(顺便 ...

  9. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  10. python 自动化-Python API 自动化实战详解(纯代码)

    主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...

最新文章

  1. python 一些方法的时间测试
  2. 第三日:继续恢复网站
  3. 数据中心进水了怎么办?数据中心如何防洪?
  4. MD5 - Java加密与安全
  5. Python对区间内回文素数的判断
  6. linux 配置EPEL源
  7. jBPM开发入门指南(4)
  8. 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
  9. Javascript第四章匿名函数第七课
  10. Java短信平台实战第二天
  11. 友盟分享微信图标显示成圆形
  12. LimeSDR官方系列教程(一):LimeSDR简介
  13. 黑鲨重装计算机安装无法继续,黑鲨装机,小编教你黑鲨怎么安装win7
  14. python创意网络爬虫_基于Python专用型网络爬虫的设计及实现
  15. java 域名查询,java 查询可用域名
  16. 尝试在Mac上编译DNX
  17. 写一个可以一键统一调整word文档格式的程序
  18. png格式图片 转 icns格式图标
  19. x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)
  20. oracle中的dual详解

热门文章

  1. 运用C语言指针知识实现对一个二维数组转置
  2. 基于深度信念网络的表示学习用于lncrna -疾病关联预测
  3. 世界互联网大会为什么把这么重要的奖颁给蚂蚁金服?
  4. 洛谷P1428 小鱼比可爱
  5. C语言的switch语句
  6. 初窥 RAP:如何使用 RAP 进行接口文档管理
  7. Windbg命令学习1(vertarget和lm和lmvm)
  8. 如何设置普通网页的微信分享图标
  9. V831基础-摄像头使用
  10. 《关键对话》读书笔记