资讯专栏INFORMATION COLUMN

python 图片在线转字符画预览

CarterLi / 1374人阅读

摘要:文章链接关于图片转字符画,相信大家都不陌生,经常出现在个超有趣的项目中。今天我也来实践这个有趣的项目,更进一步的是把这个功能做成一个在线的网站,直接上传图片生成字符画,在线预览可以让更多的人来体验。至此,生成字符画的脚本完成了。

文章链接: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 += "
"
    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/

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44795.html

相关文章

  • 运用Python实现图片字符

      本文关键阐述了运用Python实现图片转字符画,要把图片转字符画,必须要先界定1个字段名,用于和灰度级做投射,将照片每一个象素的RGB值转化成1个灰度级,把它相对应的标识符导出就得到了字符画  序言  相信大家在网上常常看到有些人展现出各种各样字符画,对于这些色彩斑斓的全球而言,我们平时看到的就是某些超清的彩色图片,有时候再来一个粗糙黑白字符画,还是比较缓解疲劳的。喜爱不要忘记个人收藏、关心、...

    89542767 评论0 收藏0
  • 小程序使用之自定义组件

    摘要:今天要介绍的是小程序的自定义组件,类似的在做开发的过程中会用到自定义,封装成通用的组件可以在不同页面里重复使用可以将复杂的页面拆分成多个低耦合的模块,便于代码的维护。 文章链接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介绍了关于 wxs 的使用,通过wxs处理数据再渲染到view层,可以简...

    Ververica 评论0 收藏0
  • 小程序使用之自定义组件

    摘要:今天要介绍的是小程序的自定义组件,类似的在做开发的过程中会用到自定义,封装成通用的组件可以在不同页面里重复使用可以将复杂的页面拆分成多个低耦合的模块,便于代码的维护。 文章链接:https://mp.weixin.qq.com/s/3xPnDwLsg7pHc_xAmS1DUQ 在前一篇文章 小程序使用之WXS中,介绍了关于 wxs 的使用,通过wxs处理数据再渲染到view层,可以简...

    ztyzz 评论0 收藏0
  • 超不清视频播放器-用Python将视频字符

    摘要:一幅图像全部转成字符序列后,就可以直接在控制台输出了。读取视频使用了,并直接用它提供的方法转了灰度图,在之前的文章中也有过介绍,计算机视觉开发利器这一步比较重要,因为有的视频分辨率很高,直接一个像素转一个字符的话量太大,所以先缩小图片。 今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是 一个超不清的视频播放器 : 在...

    DobbyKim 评论0 收藏0
  • Canvas 实现位图像素

    摘要:灰度值的计算公式,由值计算阈值处理的方法实现阈值灰度计算公式去掉图透明将图像还原大小反锯齿处理小图经过放大默认是模糊的,将置为才能清晰显示像素点。 2016 年快结束了,最后一天总要留下点什么。 showImg(https://segmentfault.com/img/remote/1460000008000019?w=798&h=525); 前段时间迷上像素画,折腾了好一段时间,后来...

    ACb0y 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<