开发者社区> 程序猿tx> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

python 图片在线转字符画预览

简介:
+关注继续查看

文章链接:https://mp.weixin.qq.com/s/yiFOmljhyalE8ssAgwo6Jw

关于python图片转字符画,相信大家都不陌生,经常出现在 n个超有趣的python项目中。
今天我也来实践这个有趣的项目,更进一步的是把这个功能做成一个在线的网站,直接上传图片生成字符画,在线预览可以让更多的人来体验。
体验网址:https://www.manjiexiang.cn/blog/post_img
举个栗子,就是这是一张图片

经过转换成的字符画是这样的,这个txt的文件

代码部分:
使用PIL处理图片,resize方法转成指定宽高

from PIL import Image
im = Image.open("qq.png")
im = im.resize((width, height), Image.NEAREST)

像素转字符方法,将r,b,g转化为灰度值,然后根据灰度值的大小确定所选字符在ascii_char中的位置。

def get_char(r, g, b, alpha=256):
    ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
    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)]

处理图片,遍历图片中的每一个像素,依次调用get_char方法即可得到每一个像素对应的字符,然后将这些字符组合起来即可得到所需的字符画了,输出到txt文件。

def draw():
    im = Image.open("qq.png")
    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'
    with open("qq.txt", 'w') as f:
        f.write(txt)

至此,生成字符画的脚本完成了。
接下来就是运用到网站项目中,区别是图片是上传的,不是本地的路径,这里采用的是django的项目,图片上传到项目里的路径

media_root = os.path.join(settings.BASE_DIR, 'upload/')

原本想将生成的txt文件下载下来的,发现下载的txt文件里面字符画错乱了,索性就重定向进行浏览,效果一样。

设置的宽高可以修改生成字符画的大小,即上面的width、height
网站地址:
https://www.manjiexiang.cn/blog/post_img

欢迎大家使用

脚本github地址:https://github.com/taixiang/py_draw

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python 字符编码练习
通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # 不用参数encoding >>> b b'\x00\x01\x02 .
693 0
Python编程:pypi打包报错[SSL: CERTIFICATE_VERIFY_FAILED]
Python编程:pypi打包报错[SSL: CERTIFICATE_VERIFY_FAILED]
20 0
Python编程:sqlalchemy模块对msyql的增删改查
Python编程:sqlalchemy模块对msyql的增删改查
13 0
Python编程:dateutil模块parser从字符串中解析出时间对象
Python编程:dateutil模块parser从字符串中解析出时间对象
23 0
Python编程:managers模块分布式进程
Python编程:managers模块分布式进程
38 0
Python编程:排序算法之选择排序
Python编程:排序算法之选择排序
17 0
Python编程:排序算法之插入排序
Python编程:排序算法之插入排序
19 0
Python编程:socket实现udp通讯
Python编程:socket实现udp通讯
27 0
Python编程:排序算法之归并排序
Python编程:排序算法之归并排序
17 0
+关注
程序猿tx
历经千帆,归来仍少年
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python系列直播第一讲——Python中的一切皆对象
立即下载
Python 脚本速查手册
立即下载
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化
立即下载