实现图片转字符
来源:互联网 发布:mac os 离线升级 编辑:程序博客网 时间:2024/05/17 05:08
实验环境:
1、win10—64bit
2、Python3.5
实验程序:
from PIL import Image #从库中引入Image
import argparse #调用argparse库
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
def color_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)]
parser = argparse.ArgumentParser()
parser.add_argument('file')
parser.add_argument('-o','--output')
parser.add_argument('--width',type = int ,defult = 80)
parser.add_argument('--height',type = int,defult = 80)
arg = parser.parse_args()
IMg = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
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 += color_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)
程序分析:
1、灰度转变为相对应的字符:
灰度值越大,对应的颜色就越浅,0对应全黑,255则对应全白
def color_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)]
2、对argparse模块的调用:
需要注意的是,argparse是一个命令行操作指令,简言之就是在运行这个demo的时候,是通过命令行窗口来实现运行的(不是通过F5)。
arser = argparse.ArgumentParser()
parser.add_argument('file') #文件名称
parser.add_argument('-o','--output') #定义了一个output变量,用作输出用
parser.add_argument('--width',type = int ,defult = 80)#从图片中获得图片的属性,宽度
parser.add_argument('--height',type = int,defult = 80)#获得该图片的属性,高度
arg = parser.parse_args() #对获得的对象的各个参数进行解析
IMg = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output
3、这一模块包括了图片的打开,文件的读写操作
if __name__ == '__main__':
im = Image.open(IMG)
im = im.resize((WIDTH,HEIGHT),Image.NEAREST) #这是Image库提供的一个改变图片大小的方法
txt = ""
#对一张图片的每一个像素点进行“扫描”操作
for i in range(HEIGHT):
for j in range(WIDTH):
txt += color_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)
实验效果:
实验总结
1、argparse库,PIL库要熟练掌握;
2、对于文件的操作,读写要熟悉
3、灰度值的概念,图像色彩的实现
文章参考:
1、Python的image模块的方法:
http://www.cnblogs.com/DjangoBlog/p/3557744.html
2廖雪峰的python教程:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000
3、argparse模块简易教程:
https://blog.ixxoo.me/argparse.html
4、灰度值的计算方法 :
http://blog.csdn.net/cool1949/article/details/6649429
5、题目来源:
https://www.shiyanlou.com/courses/370
- 实现图片转字符
- C++ & Opencv 实现图片转字符输出
- Python实现图片转字符画
- java实现图片转ascii字符画
- PHP实现图片转字符画
- python实现图片字符转换
- java实现图片转化为字符图片
- Swift 实现图片转字符画的功能
- Python 25行代码实现图片转字符画
- Python 50行代码实现图片转字符画
- python图片转字符
- 图片转字符画
- 图片转字符画
- Python 实现图片转换为字符画
- PHP实现生成ascii字符图片
- java实现图片转化为字符图片--最终代码
- golang实现图片颜色反转、图片灰度、转为字符画
- 字符转图片并且二值化
- Persona 动画编辑器参考
- lr学习笔记--controller进行并发操作,多用户单循环、多用户多循环
- 游戏AI之Lua版
- centos虚拟机拷贝导致网卡冲突
- 蓝牙控制第一天
- 实现图片转字符
- Largest Submatrix of All 1’s
- IDEA 使用Maven 查看依赖树
- MySQL索引和性能优化
- grafana之JAVA自动化配置图表
- 配置安装转载网上的 Apache2 + Gitweb+CGI配置
- 开发遇到的问题
- matlab读写raw二进制数据 bin文件
- C++常见面试题-30道