python图像转字符画_Python3:图片转字符画

防伪码:没有相当程度的孤独是不可能有内心的平和。

1、环境准备主机名IP系统Python版本

Python-01192.168.10.9CentOS release 6.9 (Final)3.5.4

参考:https://www.shiyanlou.com/courses/370/labs/1191/document

2、原理

字符画是一系列字符的组合,可以把字符看作是比较大块的像素,一个字符能表现一种颜色(暂且这么理解吧),字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。

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

任何颜色都由红、绿、蓝三基色组成,假如原来某点的颜色为RGB(R,G,B),本次实验可以用以下公式来转换灰度:gray = 0.2126 * r + 0.7152 * g + 0.0722 * b

3、实验

本次实验的核心是pillow库的Image模块和argparse模块。

3.1 图像处理库pillow

Pillow是Python里的图像处理库,支持Python3.X,提供了广泛的文件格式支持和强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

3.2 安装pillow库

直接用Python3自带的pip安装即可:pip install pillow

windows端可以用以下命令安装:python3 -m pip install pillow

3.3argparse模块

argparse模块使编写用户友好的命令行界面变得更容易。程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生错误信息。

3.3.1ArgumentParser对象

add_argument()方法必须知道期望的是可选参数,例如-o 或者--output参数用来设置输出文件:parser = argparse.ArgumentParser()

parser.add_argument('-o', '--output')

add_argument()的default关键字参数,其默认值为None,指出如果命令行参数没有出现时它们应该是什么值,还可以设定其类型type,例如设定输出字符画的宽:parser.add_argument('--width', type = int, default = 80)

3.4 准备图片

wKioL1mfj2mRI9J2AAB09TbRWOY101.jpg

3.5 源码

源码在Windows、CentOS和Ubuntu环境均验证成功。vim test.py#!/usr/bin/env python3

from PIL import Image

import argparse

# 命令行输入参数处理

parser = argparse.ArgumentParser()

parser.add_argument('file') # 输入文件

parser.add_argument('-o', '--output') # 输出文件

# 输出字符画宽,默认值为80

parser.add_argument('--width', type = int, default = 80)

# 输出字符画高,默认值为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_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)]

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)

# 字符画输出到文件

if OUTPUT:

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

f.write(txt)

else:

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

f.write(txt)

3.6 运行结果python3 test.py timg.jpg.... ..

......lB&],,,,,,,+Mp'...

..8c,,,,,,,,,,,,,,,,M"`

. '&<,,,,,,,,,,,,,,,,,,,,,!U .

'+aI,,,,,,,,,,,,,,,,,,,,,,,,;|f.'

'ox:,,,,,,,,,,,,,,,,,,,,,,,,,,,">o\..

o",:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"::c@.

. &:"I,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,f^,,lJ.

^>";,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,M,,,`&

.';",&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"!",,,:}.

^,,,:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#l,,,":]

'",,,,^,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;!,,,,,Ix..

',,,,,m,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,M!,,,,,,Z`

'Z,,,,,M,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,l!,,,,,,^.`

..h:,,,,"*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ii:,,,,,,}.

ti,,,,,:[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,k!,,,,,,,M

.I,,,,,,,:",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&!,,,,,,,,v

k,,,,,,,l:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,_!:,,,,,,,"'

Y:,,,,,,,!:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,l!l,,,,,,,:#

'[,,,,,,,,l:",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ii!,,,,,,,:0

. o^,,,,,,,!l:,,,,,",,",,,,,,,,,,,,,,,,,,":lz(,,,",,;]!:,,,,,,,0&

.`O,,,,,,,:!!",,,j**WWMW[,,,,,,,,,,,,,,,vMMMWMM8o,,,,{!;,,,,,,,0Z.

.80,,,,,,,:!l:,,,8,,""":",,,,,,,,,,,,,,,M",:,:::I,,,,(!!,,,,,,"0QW

.`00",,,,,:!l{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,^?>!,,,,,,,00Q..

.'W00",,,,,:!1*:",,,,::,,,,,,,,,,,",,,,,,,,,,,,,,,,,,,,^^!",,,,,"00Ou

..000",,,,,!I\JjmW;,",,,,,,,,,,,,-8^,,,,,,,,,,,,,,:,,&&,.`p;,,,,"000a.

%000,,,,,,!)[nxxn*;:,,,,,,,,,,,,^,,,,,,,,,,,,,,,:Izunu#..'8I,,,"000O^

.0000:,,,,;>}Mxxxxx8:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0rxxxj` #l,,"0000B

M0000,,,,,!1vnnxxxx\:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,vxxxxr@ ';",0000k

.O0000I,,,!(bWxxxxxxf:,,,,,,,,,,,,:"",,,,,,,,,,,,:Ixxxxxxx' 'W,00000

.00000},,;>a'uxxxxxx%",,,,,,,,,,,"%ujM;:,,,,,,,,,,/xxxxxxxW . M00000,

W00000n,,ip :xxxxxnt:,,,,!W:,,^#Mxnxxnn%C&M8WW;,,,"jxxxxunQ ."q000o.

000000J,-' .#xrxxxm;",,,,:;",:,"Mxxxnxv^:",":,",,,,Wnxxxv::&+ .`'800Z'

!000000Qo ..#,,"8W^,,,,,,,,,,,,,,,Mnnxu8,,,,,,,,,,,,,,&hxB,,,,#'' . #0OJ

.M0000QQ# .Wl,,,:o",,,,,,,,,,,,,,,,:&nx/;,,,,,,,,,,,,,,,,:<,,,,,J' *M.

`O000L*.. .,,,,,,;",,,,,,,,,,,,,,,,,,z*^,,,,,,,,,,,,,,,,,,M,,,,,,&. .#.

BQ00&` .m,,,,,:Z,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,IZ,,,,,:.

B#M.. :,,,,^#!:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!:J,,,,,!.

.",,,,;^ul!:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,":i)Cl,,,,l!.

. `>,,,,,":Yfi!!;,,,,,,,,,,,,,,,,,,,,,,,,,,::I!I8X!I,,,,,l!.

;!,,,,,,":{#WIl!!!!!I;:,""",::;IIl!i!!llf&&{11!;,,,,,!!r'

Ll!,,,,,,:,"?(t]jq8&MWWWM&&&&#M8*X1)(1()1ll!,,,,,,I!!f

*l!:,,,,,,,,:"::l!<_+-][{{{11{{11{[_!:!!l!:,",,,,,:l!X.

"B!!!;,,,,,,,,,,,,,","",,,,",,,",,,:,,",:,,,,:,,:!!!a..

.. *l!!!!",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!!!!i*. .

v!!!!!:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,li>!o

.<*i!!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,l;` .

.jJI,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!-

`I,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!!

.I,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:! .

W!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,id

..~!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!#.

.I!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!!

.+!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:i

%!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,iX

_!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!%

.I;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"I

'!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,i..

Y!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,!;.

'M!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.

. ?;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#.

..I:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:8.

.l,,,,,,,,,,,,,,,,,::::::::::::::::::::::::,!&.

-,,,,,,,,,,,,,,,,::::::::::::::::::::::::::lh.

. #,,,,,,,,,,,,,,,,:::::::;:::;;:::;:::::::::l1.

,,,,,,,,,,,,,,,,::::;;;;;;;;;:;;;;;;;;;;;!<

.*I::,,,,,,,,,,,,,,,;:;:;;;;;;;;;;;;;;;;;;:M

#~!;,:,,,,,:,:li!!!!li!!!!!!!!!;;;;;;;;;_

1M;>l>!!!ill!!!}##&W#W&&1>l>l!!!!!!I;Ik .

(>~((fk#oaC|)|))))))))))))(\(#oMC1

aC

\~+!!!i(())))))))))))))))))))))))(i!!!!&Q.

(aa!!@))()))))))))))())))))))))()){I!!M!!

;|["' . )/&lt\

... . .;..

当然,也可以调整默认参数,来缩小输出比例:python3 test_img.py --width 30 --height 30 timg.jpg

wKiom1mf0XOROQaiAABBW4hfoi0557.png-wh_500x0-wm_3-wmp_4-s_1180666261.png

4、总结

熟悉了argparse模块和Image模块。argparse是Python用于解析命令行参数和选项的标准模块,举例:import argparse

parser = argparse.ArgumentParser()

parser.add_argument("echo")

args = parser.parse_args()

print args.echo$ python xx.py test1

test1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值