Python写实用小工具-实现图片转字符画
2022/5/24 5:19:52
本文主要是介绍Python写实用小工具-实现图片转字符画,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、介绍
字符画,是一系列字符的组合,我们可以把每个字符看成是一个大的像素,一个字符可以代表一种颜色,字符各类越多,可体现的颜色越多,字符画就更有层次感。
灰度值,指黑白图像中点的颜色的深度,范围是0-255,白色为255,黑色为0。
RGB,是红绿蓝三颜色,通过不同的叠加可得到其他颜色。
图片转字符画原理,先定义一个字符集用来和灰度值做映射,将图片每个像素的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库的使用
这篇关于Python写实用小工具-实现图片转字符画的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门