图片转字符画

面向人群: 零基础或者初学者

难度: 简单, 属于Python基础课程

重要说明

我们尽力保证课程内容的质量以及学习难度的合理性,但即使如此,真正决定课程效果的,还是你的每一次思考和实践。

课程多数题目的解决方案都不是唯一的,这和我们在实际工作中的情况也是一致的。因此,我们的要求功能的实现,更是要多去思考不同的解决方案,评估不同方案的优劣,然后使用在该场景下最优雅的方式去实现。所以,我们列出的参考资料未必是实现需求所必须的。有的时候,实现题目的要求很简单,甚至参考资料里就有,但是背后的思考和亲手去实践却是任务最关键的一部分。在学习这些资料时,要多思考,多提问,多质疑。相信通过和小伙伴们的交流,能让你的学习事半功倍。

1.1 任务介绍

Python实现图片转换为字符画。用Python将彩色的图片经过一系列的操作后,可以变为全是由字符组成的字符画,最后可以输出为txt文件。txt文件可以用文本打开,放大或缩小查看。

1.2 知识点Linux命令行的使用

Python基础

pillow库的使用

1.3 环境linux系统(ubuntu18.04)/ windows系统可以打开ubuntu子系统

pycharm编辑器(windows如何安装pycharm社区版本)

Python 3.6.9(windows如何安装python环境)

pip3 9.0.1

pillow 5.1.0

$ python --version

Python 3.6.9

$ pip3 --version

pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)

PIL(pillow)是一个Python图像处理库,使用下面的命令来安装pillow(PIL)库:注意: Pillow是Python里的图像处理库,是PIL派生的一个分支,主要用来替换PIL库。这是因为PIL只支持Python2的版本;而在Python3中使用的则是Pillow。 大概是PIL low的意思

windows系统:(1)Win+R,输入cmd,打开Windows的命令行。

(2)输入:pip install pillow,等待安装完成。 如果安装过程不顺利,请百度找到原因,直到安装成功为止

linux系统:

sudo pip3 install --upgrade pip

sudo pip3 install pillow

1.4 原理

字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

最终显示的是黑白色的字符画,那么彩色的图片怎么转换成黑白的呢?这里就需要了解灰度值的概念了。

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像。

我们利用下面的公式将像素的RGB值转换成灰度值:

gray = 0.2126 * r + 0.7152 * g + 0.0722 * b

用不同的字符代表不同的灰度值,字符的种类和数量可以根据自己需要的效果进行调整,最好从前往后可以看到明显的变化,最后一个字符为空格符最佳:

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

图片转字符画的关键思想是将图片的灰度值与你自己设定的字符集之间建立映射关系,不同区间的灰度值对应不同的字符,之后将图片每一个像素对应的字符打印出来就是我们要的字符画啦~ 这里提供两种方法:(示例1)获取图片的RGB值,利用公式: Gray = R0.299 + G0.587 + B*0.114 计算可得每个像素点的灰度值,之后再建立映射即可。

(示例2)先将彩色图片转换为黑白图片,然后直接将每个像素点的灰度值与字符集建立映射。

1.5 代码

示例1: char_picture.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2020/12/1

# @Author : AlexZ33

# @Site :

# @File : char_picture.py

# @description: Python实现图片转换为字符画。用Python将彩色的图片经过一系列的操作后,可以变为全是由字符组成的字符画,最后可以输出为txt文件。txt文件可以用文本打开,放大或缩小查看。

# @Software: PyCharm

from PIL import Image

IMG = "./img/cat.jpg"

WIDTH = 60

HEIGHT = 45

#生成字符画所需的字符集

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

# 将256灰度映射到70个字符上

def get_char(r, g, b, alpha=256): # alpha透明度

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)] # 不同的灰度对应着不同的字符

# 通过灰度来区分色块

if __name__ == '__main__':

im = Image.open(IMG)

im = im.resize((WIDTH, HEIGHT), Image.NEAREST)

txt = ""

for i in range(HEIGHT):

for j in range(WIDTH):

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

txt += '\n'

print(txt)

# 写入文件

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

f.write(txt)

结果:

示例2: char_picture2.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2020/12/1

# @Author : AlexZ33

# @Site :

# @File : char_picture2.py

# @Software: PyCharm

from PIL import Image

img = Image.open("./img/bijini.jpg") # 打开

# img = Image.open("./img/cat.jpg") # 打开

#转换为黑白图片,参数"L"表示黑白模式

out = img.convert("L") # 灰度 先将彩色图片转换为黑白图片

width, height = out.size # 赋值

out = out.resize((int(width * 0.2),int(height * 0.1))) # 改变图像的大小

width, height = out.size # 赋值

#生成字符画所需的字符集

asciis = "@%#*+=-. "

texts = ""

for row in range(height):

for col in range(width):

gray = out.getpixel((col,row))

texts += asciis[int(gray / 255 * 8)]

texts += "\n"

with open("bijini.txt","w") as file:

file.write(texts)

结果:

1.6 详情解读

见下一篇教程 pillow的使用

往期精彩

python输入输出字符图形_【Python教程】图片转字符画相关推荐

  1. python生成字符图形_【Python AsciiArt】利用命令行打印出字符图案

    利用字符串生成工具可以方便的打印出自己想要字符图案,以及如何将图片转换为ASCII ART输出. 最终可以用命令行输出各种彩色图像---->> 一般字符图案 我们在使用一些开源软件的时候, ...

  2. python 文字识别 准确率_关于OCR图片文本检测、推荐一个 基于深度学习的Python 库!...

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  3. python做pca图_【教程】组学研究,用python快速实现PCA分析和绘图

    什么是PCA 主成分分析(Principal Component Analysis,PCA)是一种无监督的多元统计分析方法.在蛋白组学和代谢组学研究中能从总体上反应各组样本之间的总体差异和组内样本之间 ...

  4. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

  5. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  6. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  7. python 变量转字符串_[Python Basic] 字符串处理以及类型转换 2

    本节内容涉及函数稍多, 需要慢点消化, 一如既往的, 我们不仅说说 python 的最小必要知识, 也讲讲编程英语. Python内置方法和函数 续接上节课,我们还可以使用Python内置的方法和函数 ...

  8. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  9. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  10. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

最新文章

  1. 大数据的相关技术(Technology)
  2. Mysql 获取当月和上个月第一天和最后一天的SQL
  3. R语言应用实战-OLS模型算法原理及应用示例
  4. nema0183 java解析_NEMA 0183 语句解析
  5. mysql 光标的作用_Mysql那些事儿之(十四)光标的使用_MySQL
  6. 简述springmvc过程_spring mvc的工作流程是什么?
  7. 好文荐读 | 阿里巴巴为什么不用 ZooKeeper 做服务发现?
  8. 接口的mime类型ajax,Ajax的原生实现关于MIME类型的使用方法
  9. android体系结构中每层的功能,Android体系结构
  10. data2vec!统一模态的新里程碑
  11. @程序员,快来 Get 常用的 Linux 命令和技巧!
  12. Jupyter Notebook的三大短板,都被这个新工具补齐了
  13. 微信小程序远程git代码管理
  14. 2013年最新省市区三级联动mysql数据库_使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例...
  15. Oracle 数据库生成2021年节假日表SQL
  16. 一个简易的FTP客户端软件
  17. 【小学信息技术教资面试】教案模板
  18. R语言read.csv()读入行不规则数据
  19. 优惠券测试点和测试用例
  20. ajax、php、json异步数据处理

热门文章

  1. 卡尔曼滤波算法-Matlab仿真
  2. Shader+UGUI仿制Unity拾色器
  3. 移动端服务器端身份证识别介绍
  4. 深蓝词库转换2.2发布,支持手心输入法和Win10微软拼音
  5. C++:Hello C++!
  6. 图的深度优先遍历算法
  7. 二进制转四进制计算机,计算机进制转换方法
  8. python 进制转换
  9. css 加粗或斜体hover鼠标划过,导致异常闪动,整体宽度增加的解决办法
  10. 2021年CS保研经历(四):西交软院预推免、信工所三室预推免