python实现图片转字符画
作者:一个超会写Bug的安太狼 发布时间:2021-02-13 22:58:33
标签:python,图片,字符画
本文实例为大家分享了python实现图片转字符画的具体代码,供大家参考,具体内容如下
源码(注释很详细):
# -*- coding=utf-8 -*-
###################################
#1:import argparse
#2:parser = argparse.ArgumentParser()
#3:parser.add_argument()
#4:parser.parse_args()
#解释:首先导入该模块;然后创建一个解析对象;然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;
#最后调用parse_args()方法进行解析;解析成功之后即可使用
###################################
from PIL import Image #从PIL模块中引入Image这个类
import argparse #引入argparse这个模块。argparse 库是用来管理命令行参数输入的
#命令行输入参数处理
parser = argparse.ArgumentParser()
parser.add_argument('file') #输入文件
parser.add_argument('-o', '--output') #输出文件
parser.add_argument('--width', type = int, default = 80) #输出字符画宽
parser.add_argument('--height', type = int, default = 80) #输出字符画高
#获取参数
args = parser.parse_args()
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
#定义一个ascii的列表,其实就是让图片上的灰度与字符对应
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
# 将256灰度映射到70个字符上
def get_char(r,g,b,alpha = 256): #这个调用跟im.getpixel函数有关,这个函数是根据图片的横纵坐标,把图片解析成r,g,b,alpha(灰度),有关的四个参数,所以这里输入参数是四个
if alpha == 0: #如果灰度是0,说明这里没有图片
return ' '
length = len(ascii_char)#计算这些字符的长度
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)#把图片的RGB值转换成灰度值
unit = (256.0 + 1)/length #257/length
return ascii_char[int(gray/unit)] #这个相当于是选出了灰度与哪个字符对应。
if __name__ == '__main__':#如果是本程序调用,则执行以下程序
im = Image.open(IMG)#打开图片
im = im.resize((WIDTH,HEIGHT), Image.NEAREST)#更改图片的显示比例
txt = ""#txt初始值为空
for i in range(HEIGHT):#i代表纵坐标
for j in range(WIDTH):#j代表横坐标
txt += get_char(*im.getpixel((j,i)))#把图片按照横纵坐标解析成r,g,b以及alpha这几个参数,然后调用get_char函数,把对应的图片转换成灰度值,把对应值得字符存入txt中
txt += '\n'#每行的结尾处,自动换行
print(txt)#在界面打印txt文件
#字符画输出到文件
if OUTPUT:
with open(OUTPUT,'w') as f:#文件输出
f.write(txt)
else:
with open("output.txt",'w') as f:#文件输出
f.write(txt)
使用指南:
进入程序所在目录:输入图示命令:python ascii.py lanpang.png,ascii.py是程序名,lanpang.png是图片名
图片:lanpang.png
效果图:
图片太大,截图不全,用Windows命令行打开看看,文件为output.txt
windows命令行打开文本文件的命令是:type 文件名
例如:type output.txt
打开后效果图:
来源:https://blog.csdn.net/m0_46278037/article/details/113840108


猜你喜欢
- 导语hello everyone! I'm kimiko!Miss me???嘿!中秋结束了,开始正式营业给大家继续送福
- --取得所有数据库名 包括系统数据库 --SELECT name FROM master.dbo.sysdatabases --取得所有非系
- public partial class CMS_DBDataContext { partial void OnCreated() { //
- 本文主要介绍了np.where()[0] 和 np.where()[1]的具体使用,以及np.where()的具体用法,废话不多说,具体如下
- 在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题。def generat
- 网站或应用的登录页面有时候通常用户会看很多遍,同时也有机会诱使临时用户注册,所以,一个设计良好的登录页面会比你想象的更有用。这里是一些我们收
- Application Name(应用程序名称):应用程序的名称。如果没有被指定的话,它的值为.NET SqlClient Data Pro
- 切分文件最近遇到需要切分文件的需求,当然首选用python来解决,网上搜了下感觉都太复杂了,其实用python自带函数即可解决。f = op
- MySQL的MIN函数是用来找出一个记录集最小值的记录。要了解MIN函数考虑的EMPLOYEE_TBL表具有以下记录:mysql> S
- 渲染引擎渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上。默认情况下渲染引擎可以显示HTML,XML文档以及图片。 通过插件(
- 你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短。从此解放上班时间,研究更多更有效率的工作方法。进一步提升
- 如下所示:import osimport reimport stringfile = open("data2.txt")
- 前言QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid。QTableWidget是QTableVi
- SeaTunnel是什么?SeaTunnel下一代高性能、分布式、海量数据集成框架。SeaTunnel是一个非常易于使用的超高性能分布式数据
- 安装时建议你为MySQL管理创建一个用户和组。由该组用户运行mysql服务器并执行管理任务。(也可以以root身份运行服务器,但是不推荐)第
- 在后端有许多的封装方法来截取字符串或者对字符串的操作,同样前端也有相应的方法。有一个data数据为ipaddrdata() {
- 可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了通常会在母板中定义页面专用的 CSS 块和 JS 块,方便
- 刚刚心血来潮,编了一个国际域名查询的功能页面,比较简单,没有做什么美化和修饰,主要利用了服务器端的XMLHTTP访问第三方服务器实现域名查询
- Golang中使用http.FileServer使用http.FileServer可以管理向浏览器返回静态文件http.Handle(&qu
- 什么是中间件我们从一个简单的例子开始。高流量的站点通常需要将Django部署在负载平衡proxy之后。 这种方式将带来一些复杂性,其一就是每