神奇!几行代码就能轻松把图片转为字符图

2020-02-23 23:26:34

码神镇楼

准备阶段

首先需要安装一个Python的图形处理库。终端直接输入:

brew install Pillow

实现阶段

不多说,直接上打码。

from PIL import Image  # 导入Pillow的Image模块IMG = "/Users/##########/avart.jpg"                 # 需要处理掉的图片路径filePath = "/##############/avart.txt"              # 处理结果的保存路径ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")height = 45width = 100# 重点。将256灰度映射到70个字符上def get_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                       # 比例
    inext = int(gray / unit)                          # 根据灰度求对应的index
    return ascii_char[inext]if __name__ == '__main__':

    im = Image.open(IMG)                              # 读取图片
    im = im.resize((width, height), Image.NEAREST)    # 调整图片的大小

    txt = ""
    for i in range(height):                           # 遍历图片的像素点,获取每一个像素点的rgbA值
        for j in range(width):
            txt += get_char(*im.getpixel((j, i)))     # 获得相应位置像素点的值组元(a,g,b,a)
        txt += '\n'                                   # 换行

    print txt    # 字符图输出到文件
    with open(filePath, 'w') as f:                    # 输出到指定文件
        f.write(txt)

好了,就是这么一点码。很简单吧。
下面看看效果图:

源图


效果图

觉得还不错的话,就拜托点个赞,加个关注哦!😊



  • 2021-03-22 10:55:29

    box-shadow四个边框设置阴影样式

    其实对于box-shadow,老白我也是一知半解,之前用的时候直接复制已有的,也没有仔细思考过box-shadow的数值分别对应什么,最后导致阴影的边如何自由控制,苦于懒人一个一直没有正式去学习,今天无意中看到以下这篇文章,瞬间清醒有木有,看完整片文章,对于box-shadow阴影四个边的设置完全了如指掌了,再也不怕修改box-shadow了!

  • 2021-04-06 17:13:08

    nuxt.js keep-alive和嵌套路由不变化

    因为你错误的使用了 <nuxt>标签。 你应该使用 <nuxt-child keep-alive > </nuxt-child> 因为上层已经使用过了 <nuxt></nuxt>标签。

  • 2021-04-13 09:48:45

    消息中间件之MQ详解及四大MQ比较

    消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

  • 2021-04-13 09:52:18

    Kafka学习之路 Kafka的简介

    Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

  • 2021-04-13 09:53:12

    nodejs操作消息队列RabbitMQ

    消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程Thread之间通信。