为了账号安全,请及时绑定邮箱和手机立即绑定

python 图片在线转字符画预览

标签:
Python

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

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

代码部分:
使用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文件里面字符画错乱了,索性就重定向进行浏览,效果一样。
5bc357910001970404400196.jpg
设置的宽高可以修改生成字符画的大小,即上面的width、height

原文出处:https://www.cnblogs.com/taixiang/p/9786654.html  

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消