趣味编程(一)——把图片转成文字图

    一霎好风生翠幕,几回疏雨滴圆荷。——(宋)晏殊《浣溪沙》

    时间过得好快,转眼就到了夏天,又到了骄阳似火的季节。最近忙里偷闲,做了一个新鲜玩意儿,用Python编程把图片转成了文字图,以后发朋友圈配图可以变得高级一些。没什么好说的,直接上代码。

# -*- coding:utf-8 -*-
from PIL import Image, ImageDraw, ImageFont

def pic2Text(_file, _text):
    img = Image.open(_file).convert("RGBA")
    w = 100  # 宽度固定
    h = int((float(img.size[1]) / float(img.size[0])) * w)  # 高度按比例得出
    fontSize = 20  # 输出字体大小
    img.thumbnail((w, h))  # 获取缩略图
    src = img.convert('L')  # 转换成灰度图
    minGrey = 255  # 最小灰度
    maxGrey = 0  # 最大灰度
    greyMap = [[0 for col in range(h)] for row in range(w)]  # 灰度图 注意 w h
    # 此处循环求得灰度表以及最大最小灰度值
    for i in range(w):
        for j in range(h):
            greyMap[i][j] = src.getpixel((i, j))  # 获取每一个点的灰度值
            if greyMap[i][j] > maxGrey:  # 获取最大灰度
                maxGrey = greyMap[i][j]
            if greyMap[i][j] < minGrey:  # 获取最小灰度
                minGrey = greyMap[i][j]
    # 计算灰度间隔
    greyStep = (maxGrey - minGrey) / len(_text)
    # 此处生成文字图片,注意输出的时候 w 和 h
    output = Image.new('RGBA', (w * fontSize, h * fontSize), (255, 255, 255))
    draw = ImageDraw.Draw(output)
    ft = ImageFont.truetype("msyhbd.ttc", fontSize)  # 注意字体支持中文
    for j in range(h):
        for i in range(w):
            index = int((greyMap[i][j] - minGrey) // greyStep)  # 计算出改点使用哪个字符
            if index >= len(_text):
                index = len(_text) - 1  # 注意结尾最大灰度值,防止越界
            draw.text((i * fontSize, j * fontSize), unicode=(_text[index], 'UTF-8'), fill=img.getpixel((i, j)), font=ft,
                      text=_text[index])  # 汉字编码
    output.save(_file.split('.')[0] + '_text.png', 'PNG')

if __name__ == '__main__':
    textList = ['猛', '龙', '过', '江']
    pic2Text('E:/001.jpg', textList)

    如果出现错误:OSError: cannot open resource,是由于字体没有安装,安装msyhbd.ttc字体即可。最后来一张云龙兄的效果图:

    这个东西还是有那么点意思的,以后碰到不太懂的可以用来吹吹逼,O(∩_∩)O哈哈~,就分享到这里吧! 

参考:

    1、https://github.com/winterfeel/Pic2Text/blob/master/pic2Text.py

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值