Python字符画生成详解
Python字符画生成详解
- 字符画的原理
- 方案设计
- 设计思路
- 整体流程
- 代码实现
- 成品展示
- 提示
字符画的原理
顾名思义,字符画就是由字符组成的画
日常我们在网上看到的彩色图片一般有3个颜色通道:R(红)、G(绿)、B(蓝)。你没看错,就是初中物理你学过的那个“色光三原色,以此构成颜色鲜明的图片。
而当绘图的颜色只有一种的情况下,如素描的时候,则通过线条颜色的密集程度不同进行明暗区分,即灰度值区分。
同理,对于字符画,我们也可以根据字符笔画的密集程度进行字符画的明暗区分,以此实现对字符画各部分的灰度区分。
方案设计
设计思路
首先,每个字符中线条的密集程度进行排序,用于生成字符画时的明暗区分。这里我采用的字符是"MNHQ$OC?7>!:-; ",各位可以更具自己的需求进行更改。
基础的字符画是单色画,既然如此,我们则没必要针对彩色图片进行方案设计,可以将图片将图片整体修改为灰色,根据灰色图片中每个像素点的灰度值将对应像素替换成对应字符。
考虑到一般情况下,一个字符的高度大于它的宽度,并且每行字符之间都会有固定的间隙,为了保证最终成品的与原图的宽高比,可以将转换后的灰图的宽度进行拉伸,用于抵消由于字符宽高不一致和行间间隙造成的误差。
然后,生成一个和灰图相同的数组 pixels,遍历 pixels每个像素,根据该像素的灰度获取对应字符并进行拼接,最后返回拼接后字符串。
整体流程
- 设置字符串chars用于区分不同灰度。
- 通过PIL(需安装pillow)的Image包读取img并进行图片宽度拉伸。
- 将img转换为灰图。
- 使用numpy生成与img相同的数组pixels。
- 定义空串result。
- 循环遍历pixels像素点,获取该像素灰度在chars中对应的字符,并将该字符拼接至result,一行遍历完成后拼接换行符。
- 返回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字符画生成详解相关推荐
- Python Turtle 海龟绘图详解官方文档中文版
Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...
- python:基础知识详解
一.基本元素 变量 变量赋值: a="hello world" 变量命名: • 字母:a-z, A-Z, 其他语言的字母符号 • 数字:0-9 (不可以出现在首字符) • 下划线: ...
- 菜鸟教程python正则表达式_python 正则表达式详解
python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...
- python的图书管理项目教程_基于python图书馆管理系统设计实例详解
写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...
- python图书馆管理系统实验报告_基于python图书馆管理系统设计实例详解
写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...
- 信息学奥赛 python 教程_Python在信息学竞赛中的运用及Python的基本用法(详解)
前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在<算法竞赛入门经典-训练指南>中所说的一样,如果会用 ...
- python中rstrip 函数,Python rstrip()方法实例详解
Python 字符串 描述 Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格). 语法 rstrip()方法语法: str.rstrip([chars]) 参数 c ...
- Python内置函数详解——总结篇
引 言 国庆期间下定决心打算学习Python,于是下载安装了开发环境.然后问题就来了,怎么开始呢?纠结一番,还是从官方帮助文档开始吧.可是全是英文啊,英语渣怎么破?那就边翻译边看边实践着做吧(顺便 ...
- python turtle循环图案-Python内置模块turtle绘图详解
urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...
- python 自动化-Python API 自动化实战详解(纯代码)
主要讲如何在公司利用Python 搞API自动化. 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 co ...
最新文章
- python 一些方法的时间测试
- 第三日:继续恢复网站
- 数据中心进水了怎么办?数据中心如何防洪?
- MD5 - Java加密与安全
- Python对区间内回文素数的判断
- linux 配置EPEL源
- jBPM开发入门指南(4)
- 快乐大本营中测试声音年龄的软件_海天味极鲜酱油极限挑战宝藏行 终极试炼,极限成员们勇登珠峰大本营...
- Javascript第四章匿名函数第七课
- Java短信平台实战第二天
- 友盟分享微信图标显示成圆形
- LimeSDR官方系列教程(一):LimeSDR简介
- 黑鲨重装计算机安装无法继续,黑鲨装机,小编教你黑鲨怎么安装win7
- python创意网络爬虫_基于Python专用型网络爬虫的设计及实现
- java 域名查询,java 查询可用域名
- 尝试在Mac上编译DNX
- 写一个可以一键统一调整word文档格式的程序
- png格式图片 转 icns格式图标
- x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)
- oracle中的dual详解