摘要这一篇文章介绍使用Python生成字符画的方式. 会给出简单的原理介绍和实现的方式. 最后会给出源代码的链接地址.

简介

这一篇介绍一下使用Python来进行字符画的生成. 这里会介绍一下生成的步骤和生成的代码. 同时会将代码的Github的链接附在最后. 最终的生成的效果会是下面的这个样子.

生成的方式和原理

这一部分介绍一下生成字符画的原理和代码实现. 同时会给出代码仓库的链接.

源代码

Github仓库链接: Python生成字符画

觉得在这里看起来不方便可以在代码仓库中进行查看.

实现原理

其实实现的想法很简单, 我们希望将每一个像素点都对应到一个字符串上面. 于是对于每一张图片来说, 我们依次遍历他的像素点, 比如灰度图像是256种灰度, 我们对应到256个字符串上面. 这样就可以实现图像转字符串. 下面是一个流程.

读入图片, 修改图片大小

对每一个像素点进行操作

若是彩色, 则转换为灰度

将灰度值映射为字符串

在转换为字符串的时候, 因为像素块是正方形的, 字符串是长方形的, 即一般的字母都是长比宽大, 所以我们在实际处理的时候, 会在每个字符后面加上一个空格, 来缓解一下最终输出时候长和宽不对等的情况. 这个也就是对应代码中的, txt += '  '.

将最终的结果进行保存

代码实现

我们将上面介绍的方法进行代码实现. 我将所有的注释都写在代码中了, 可以直接进行阅读.

from PIL import Image

import fire

ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

# 将256灰度映射到70个字符上-即输入一个像素点,输出一个符号

def get_char(r,g,b,alpha = 256):

if alpha == 0:

return ' '

length = len(ascii_char)

# 将彩色转换为灰度

gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)

unit = (256.0 + 1)/length

return ascii_char[int(gray/unit)]

def image_process(input_file, output_file='res.txt', pic_height=100, pic_weight=100):

# 加载图片

im = Image.open(input_file)

# 调整图片大小

im = im.resize((pic_weight,pic_height), Image.NEAREST)

# 保存缩小后的图片

# im.save('temp.jpg')

txt = ""

# 对每个像素点进行操作

for i in range(pic_height):

for j in range(pic_weight):

txt += get_char(*im.getpixel((j,i)))

txt += '  '

txt += '\n'

print(txt)

#字符画输出到文件

if output_file:

with open(output_file,'w') as f:

f.write(txt)

else:

with open("output.txt",'w') as f:

f.write(txt)

if __name__ == '__main__':

"""

input_file: 图像的名称

output_file: 保存文件的名称

"""

fire.Fire(image_process)

最终在使用的时候, 可以直接在命令行中进行操作.

python char_pic.py ../char_pic/62.jpg

我们再看一个例子的效果, 关于效果的查看, 可以使用文本编辑器进行缩放, 使用Ctrl+-进行缩放.

一些其他的

今天打开bing的时候没打开, 第一次看到这样的错误提示, 很是可爱.

python生成字符画_Python生成字符画 | 文艺数学君相关推荐

  1. python 读取yml文件_Python 读取 yaml 配置文件 | 文艺数学君

    摘要这一篇介绍 Python 中使用 yaml 的方式加载配置文件,包含关于 pyyaml 的简单使用,读入和写入配置文件. 简介 之前我们介绍过使用 configparser 来读取配置文件(Pyt ...

  2. python生成字符画_python生成动态字符画

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 但,可以将字符串的一部分复制到新创建的字符串,达到"看起来修改&quo ...

  3. python图像转字符画_python图像处理-字符画风格图片

    前言 字符画图片,顾名思义就是由一个个字符组成的图片,下面这张图片很容易帮助你理解,如果我们可以将字符排列好,让他看上去像一个物体的形状,那么最后再将它输出保存为一张图片就可以实现了. 下面的这些形状 ...

  4. python设定数值范围_Python 生成周期性波动的数据 可指定数值范围

    代码 import numpy as np import math import matplotlib.pyplot as plt #python在指定的时间段生成周期性波动的数据: #周期性 lon ...

  5. python按字符分割_Python:按字符位置分割字符串 - python

    如何按单词的位置分割字符串? 我的数据如下所示: test = 'annamarypeterson, Guest Relations Manager, responded to this review ...

  6. python生成字符图形_python生成汉字图片字库

    最近做文档识别方面的项目,做汉字识别需要建立字库,在网上找了各种OCR,感觉都不好,这方面的技术应该比较成熟了,OCR的软件很多,但没有找到几篇有含金量量的论文,也没有看到哪位大牛公开字库,我用pyg ...

  7. python求字符组合_python – 生成一个潜在的8个字符串的所有可能的2个字符组合?...

    我有一个生成元组元组的所有可能组合 ( (base1 , position1) , (base2 , position2) ) 碱基= ["U","C",&qu ...

  8. python 生成文字图案_python 生成图形验证码

    日常在网站使用过程中经常遇到图形验证,今天准备自己做个图形验证码,这算是个简单的功能,也适合新手练习的,便于自己学习. 主要用到的库--PIL图像处理库,简单的思路,我们需要随机的颜色,随机的数字或字 ...

  9. python生成随机数方法_Python生成随机数的方法

    如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文 ...

最新文章

  1. Java Review - Queue和Stack 源码解读
  2. 15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)
  3. iOS截取特定的字符串(正则匹配)
  4. Java 算法 找素数
  5. Python之路【第十六篇续】Django进阶篇
  6. android弹窗设计,想印:UI设计中弹窗设计的五条基本原则
  7. Facebook详解 涵盖发展历史和系统模型
  8. python画简便的图-特征锦囊:常用的统计图在Python里怎么画?
  9. nodeJS丶Buff使用及相关API
  10. CAD教程:CAD自定义菜单和工具栏的操作技巧
  11. bamboo 启动报错,无法正常访问
  12. 聚光灯效应:为什么没有人记得你做过什么
  13. 一区HR:南京农业大学房婉萍教授团队揭示茶树-豆科植物互作改善茶叶品质
  14. 通达信指标公式编写常用函数(八)——MAX、MIN、BETWEEN、ABS
  15. 【BI学习心得15-数据分析思维】
  16. 牛客_美团点评2020校招前端笔试题(仅个人学习记录)
  17. ip,ip查询,ip地区查询,查询ip,查询地区ip,地区查询
  18. 当你心情不佳的时候,你会选择什么样的方式来放松自己?
  19. Android实现动态任意拖动图片
  20. 大华设备通过GB28181协议接入EasyGBS,无法实现公网语音对讲问题的解析

热门文章

  1. android 微信文件位置改变大小,安卓微信8.0.6内测更新:发文件大小上调1G等6个变化!...
  2. 区块链公司依靠电信主网颠覆汇款行业
  3. Mac软件序列号查询工具KCNcrew Pack mac
  4. 快递100企业版接口(API)gitee
  5. Minecraft 1.19.2 Fabric模组开发 02.物品栏+物品
  6. python学习-进阶
  7. Mac OS X 系统目录结构
  8. 美团App用户界面分析
  9. 基于stm32的四轴无人机和智能车编程实践目录
  10. linux清空文件命令