# Python写实用小工具-实现图片转字符画

[En]

Character painting is a combination of a series of characters, we can regard each character as a large pixel, a character can represent a color, the more kinds of characters, the more colors can be reflected, the more hierarchical the character painting will be.

[En]

The grayscale value, which refers to the depth of the color of the point in the black-and-white image, ranging from 0 to 255, white to 255, and black to 0.

RGB，是红绿蓝三颜色，通过不同的叠加可得到其他颜色。

RGB转灰度值，有个心理学公式，在网上搜一下我们使用下面这个公式

gray = (2126 * r + 7152 * g + 722 * b) / 10000


## 2.1 准备

1. 我们用到的是Python3，确保有Python3的环境
python3 -V

2. 安装Python图象处理库pillow(PIL)
pip install --upgrade pip
pip install pillow


## 2.2 代码

ascii.py

#!/usr/bin/python3
#coding: utf-8

from PIL import Image

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

def get_char(r, g, b, alpha=256):
if alpha == 0:
return ' '
# 这是一个优化，将浮点运算转成整型运算
gray = (2126 * r + 7152 * g + 722 * b) / 10000
# 为什么是1.0 因为alpha、gray是整型运算的时候按整型算如果小于1的话按0算
char_idx = int((gray / (alpha + 1.0)) * len(ascii_char))
return ascii_char[char_idx]

def write_file(out_file_name, content):
with open(out_file_name, 'w') as f:
f.write(content)

def main(file_name="test.jpg", width=100, height=80, out_file_name='output.txt'):
text = ''
im = Image.open(file_name)
im = im.resize((width, height), Image.NEAREST)
for i in range(height):
for j in range(width):
text += get_char(*im.getpixel((j, i)))
text += '\n'
print(text)
write_file(out_file_name, text)

if __name__ == '__main__':
main('dora.png')



## 2.3 测试

1. 准备图片dora.png
2. 执行命令
python3 ascii.py



MMH$NM MQ7777>$N   OM
O7777777     C    77OM
C77777777   >  Q:   $777M 77777777$>Q     7O$O Q$
M?777777N    N   O H .N    >N?>
777777N   :N:     >QQQQ H
N77777               MN   .:????

M77777?  ;:???QQQQ!    H
H7777H                 !    !HO;
C7777    QQQQQHNNHNM$> : O C7777 QQQQQQQQQQQQQQQQQQQQQO ?$7777    QQQQQQQQQQQQQQQQQQQQ$M M7777 CQHNC?$MHQQQQQQQQQQM  –
?777     ?77777777?QQQQQQQ?   M
M777N     $777777777MQQQH– ? ?777! .777777777QQH ! C777 ?O777777N! : ?77?– .!QQMMMMMH$M
O777NNQQQQQ      Q–QCMNM
NQQNQ7777H      Q;;;; M
77777777C      O;;;C ?
777777777O    > H??

?777777Q! ;HO:      ;H  MC:N
H7O$777$ :           ?M      M
M777777H  ?          N       Q
?77777?   :        ;        Q
QQQMH777777C    .?Q?:  H        M
QQQM$7777777Q Q7? M77777777777QQ?NO777H M M7777777777777777$MM N    ;
M N77777777777OM
C7777777HM
77777QM
7QM
;
O
M\$?OM

`

• 2202/5/24 学习python的基础应用及pillow库的使用

Original: https://www.cnblogs.com/okokabcd/p/16304071.html
Author: okokabcd
Title: Python写实用小工具-实现图片转字符画

(0)

### 大家都在看

• #### python | 将照片按顺序制作成PDF

把图片按照顺序合成PDF。 需求分析： 要保证图片的顺序，只能从文件命名上下手，所以可以把图片命名成数字，数字小的排前面，数字大的排后面，类似这样： 这样命名完后，全是数字，又不好…

Python 2023年6月12日
0116
• #### 通过webhook触发代码同步到阿里云codeup

需求描述： 通过判断gitlab的push事件，一旦有提交或者合并，调用webhook，触发仓库自动同步到阿里云codeup。哪个仓库push的，就会获取这个仓库的路径同步至阿里云…

Python 2023年8月13日
079
• #### 前端枚举enum的应用(Element)封装

什么是枚举Enum 枚举 Enum是在众多语言中都有的一种数据类型，JavaScript中还没有（TypeScript有）。用来表示一些特定类别的常量数据，如性别、学历、方向、账户…

Python 2023年10月18日
0126
• #### Python实现酷炫的动态交互式数据可视化，附代码

这是本文的目录 前言 * 数据可视化 图1：PCA方差图 图 2：Celluloid例子 图三：特斯拉数据集 图4：Plotly例子 图5：Bokeh 演示 图6 Seaborn …

Python 2023年8月31日
0100
• #### python中冒号报错_是什么导致Python中出现冒号预期错误？

我正试图弄清楚下面代码中预期的冒号错误。感谢任何帮助。在 代码是-if df.loc[‘pivot’] > df.loc[‘Open&#8…

Python 2023年8月9日
095
• #### 【Python编程基础练习】 Python编程基础练习100题学习记录第二期（11~20）

作为我学习Python的基础练习记录 1.此为GitHub项目的学习记录，记录着我的思考，代码基本都有注释。2.可以作为Python初学者巩固基础的绝佳练习，原题有些不妥的地方我也…

Python 2023年6月12日
0109
• #### python实现2048——1、界面&逻辑

前言 这次，我们来尝试一下2048这款游戏，不了解的可以自行玩一下，这里不展开了。还是使用pygame，因为我们之前已经有过了好几个pygame项目了，这次我准备快一点，主要讲其中…

Python 2023年9月23日
093
• #### python 使用vtk和matplotlib保存高质量图片

python 使用matplotlib和vtk保存高质量图片 引言 一、vtk保存大尺寸图片 二、matplotlib更改尺寸和分辨率 * 2.1 尺寸和分辨率 2.2 其它常用设…

Python 2023年8月30日
0110
• #### 使用 Pycharm 创建一个 Django项目（详解）

文章目录 Django 简介 创建Django的虚拟环境 * – 1.这里我使用的是anaconda navigator创建的，选择environment，点击crea…

Python 2023年8月6日
0117
• #### 记一次 .NET 某安全生产信息系统 CPU爆高分析

一：背景 1.讲故事 今天是🐏的第四天，头终于不巨疼了，写文章已经没什么问题，赶紧爬起来写。 这个月初有位朋友找到我，说他的程序出现了CPU爆高，让我帮忙看下怎么回事，简单分析了下…

Python 2023年10月11日
0120
• #### 太空射击第14课： 玩家生命

太空射击第14课： 玩家生命 在本课中，我们将为玩家添加多个生命值，并在玩家死亡时添加一个漂亮的爆炸。本教程所有素材包从这里下载 视频 您可以在此处观看本课程的视频： 玩家爆炸 我…

Python 2023年9月23日
096
• #### pygame与列表元素结合实现有趣的堆栈效果，进来看看咯。

pygame与列表元素结合实现有趣的堆栈效果，进来看看咯。 文章目录 一、先把pygame的框架搭起来 二、来个矩形框吧 三、来一箩筐的矩形框吧 * （一）初始化list对象 （二…

Python 2023年9月24日
083
• #### 用python制作表白墙，三秒钟写完

源码在下有需要的自便即可 import random import pygame from PIL import Image import os text = input(‘请输入…

Python 2023年9月19日
057
• #### 第二章4节-Numpy运用之数组形状改变

1、数组形状改变 Numpy中提供了reshape等方法改变数组的形状，但不改变数据的值 可以对数组转换为一维，即展平 可以将多个数组，组合成一个更大的数组 三维数组的创建和索引 …

Python 2023年8月26日
092
• #### 今日内容 前端之HTML基础知识

*前端简介 1.前端与后端 前端与用户直接打交道的操作界面都可以称之为是前端后端(幕后工作者)不直接与用户打交道的内部真正执行核心业务逻辑的代码程序 2.前端核心基础 HTML：网…

Python 2023年6月12日
0147
• #### knn(k近邻算法)——python

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 导入相关库 4.2 读取数据 4.3 读取变量…

Python 2023年8月1日
0102