文章目录

  • 前言
  • 一、增加内容
  • 二、效果
  • 三、修改
    • 1.图片生成修改
    • 2.nonebot2代码新增
  • 总结

前言

基于PIL对图片进行修改,在前一文中是对通过对已定义的表情包模板,在群聊中进行表情包生成,但总定义模板还是过于麻烦,于是升级为输入图片即可添加文字。前文网址:https://blog.csdn.net/qq_45720608/article/details/120026989


一、增加内容

通过对nonebot2机器人发送图片或动图,让它对表情包添加文字。

二、效果

三、修改

1.图片生成修改

新增函数

# 定义两个函数,修改前文函数输入,改为图片生成是传入文本及图片地址。
def get_im(keys):keys = urllib.parse.quote(keys)path = f'/home/xiaochen/database/image/{keys}.jpg'return path# 定义文字写入图片下方15%处,定义字体选择大小,得出输入多少字较为合适
def get_im_infor(path):im = Image.open(path)w, h = im.sizen = int(0.145 * h)if n >= 25:x = int(w/25)else:x = int(w / n)return x

对前文原有图片生成函数进行修改:

# 定义一个函数,def get_express_img(path, text),将之前的keys修改为传入图片地址。最终返回图片生成的地址
def get_express_img(path, text):im = Image.open(path)w, h = im.sizen = int(0.145*h)
# 对图片中的字体大小进行定义if n >= 25:font = ImageFont.truetype(f'/home/xiaochen/database/Fronts/msyh.ttc', 25)else:font = ImageFont.truetype(f'/home/xiaochen/database/Fronts/msyh.ttc', n)t_w, t_h = font.getsize(text)# print(t_w, t_h)text_size = (w, t_h + 20)bg = Image.new('RGB', text_size, color='white')draw = ImageDraw.Draw(bg)text_coordinate = ((w - t_w) / 2, 10)draw.text(text_coordinate, text, (0, 0, 0), font=font)f_size = (w, h + t_h)f = Image.new('RGB', f_size, color='white')
# 判断图片类型,jpg类型为在原有图片下方拼接文字图片,gif为在图片下方写入文字if '.jpg' in path:f.paste(im, (0, 0))f.paste(bg, (0, (h - t_h)))out_path = f'/home/xiaochen/database/image_express/output.jpg'f.save(str(out_path))else:frames = []# 定义文字写入位置text_coordinate1 = ((w - t_w) / 2, 0.85 * h)for frame in ImageSequence.Iterator(im):d = ImageDraw.Draw(frame)# 写入文字d.text(text_coordinate1, text, (0, 0, 0), font=font)del db = io.BytesIO()frame.save(b, format="GIF")frame = Image.open(b)frames.append(frame)out_path = f'/home/xiaochen/database/image_express/output.gif'frames[0].save(out_path, save_all=True, append_images=frames[1:])return out_path

2.nonebot2代码新增

在前文的基础上,进行代码新增即可。在前文的@expression.got("expression", prompt="生成表情包类型及语句(例如:奥奇1/给我爬)?")async def handle_expression(bot: Bot, event: Event, state: T_State)下新增加一个if判断语句,原有代码归于if ('/' in msg) and (len(msg)<=20)中,因为对nonebot2发送的图片链接长度远大于20。新增代码如下:

    else:if ':image' in msg:state['expression'] = (msg.split('url=')[-1][:-2])resp = requests.get(state["expression"])resp_cont = resp.contentim = Image.open(BytesIO(resp_cont))format = im.formatif format =='JPEG' or format =='JPG':state['url'] = f'/home/xiaochen/database/image_express/input.jpg'im.save(str(state['url']))else:state['url'] = f'/home/xiaochen/database/image_express/input.gif'im.save(str(state['url']), save_all=True)x = get_im_infor(state['url'])-1await expression.send(f'可以输入文字了,由于图片尺寸,输入{x}个字效果可能较好:')await expression.reject()else:# 定义一个 state['url']存放图片保存下的地址,在第一次发送图片继续接收文字,最后将本地处理的图片发送msg = str(state['expression'])await expression.send(Message(msg))im_path = state['url']out_path = get_express_img(im_path, msg)img = MessageSegment.image(f'file://{out_path}')await expression.send(img)

总结

在前文的基础上,经过修改升级的表情包插件,希望里面关于PIL的使用对您能有所帮助,原先插件下载https://github.com/PnengChen/nonebot2

如果你热爱nonebot2机器人,可加群:970353786,非诚勿扰。

nonebot2——表情包生成插件升级版相关推荐

  1. nonebot2——表情包生成插件

    文章目录 前言 一.导入 二.效果 三.代码 总结 前言 基于PIL,对已存有的表情包类型进行文字添加.需要下载包pillow. 通过对已定义的表情包模板,在群聊中进行表情包生成,插件下载在总结一栏. ...

  2. 表情包生成1.0安卓版 斗图永无止尽

    软件介绍: 表情包生成一键搜索各种搞怪熊猫表情,超多表情让你不怕没有表情,一键下载保存斗图永无止尽! 软件名称:表情包生成1.0 软件分类:安卓版 软件预览图: 软件版本号:1.0 软件语言:简体中文 ...

  3. PyTorch实战,基于GAN实现表情包生成

    这里写自定义目录标题 这是一个基于PyTorch框架实现的表情包生成工具,使用条件生成对抗网络(cGAN)进行训练.假设表情包是由描述和图像组成,我们将基于描述生成图像. 首先,我们需要准备我们的数据 ...

  4. python 表情包制作库_Django+PIL 做一个表情包生成网站

    ZERO 前言 最近看到一个系列表情包火了起来,无聊之下想起入门Django时没什么好玩项目的种种不利,就写了这么一篇菜菜的文章,也算是一个简单的入门教程吧 ONE 什么是Django Django ...

  5. Matlab 把你变成表情包 - 表情包生成

    任务说明 在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片.效果如下图所示: 实现步骤 导入朋友的照片(前景照片): 处理前景照片(缩放.旋转,填充): 导入熊猫头照片( ...

  6. python是动态语言图片_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...

    小编找到了10几行的,好玩的动态表情包生成的代码.分享分享! 这个程序怎么做呢?不要急,来听我给大家分析分析. 工具:程序环境 语言:Python 3.6 编辑器:Pycharm 程序步骤 实现字符动 ...

  7. 一言不合就想斗图?快用深度学习帮你生成表情包

    源 | AI研习社 AI研习社:斯坦福大学的两个学生 Abel L Peirson V 和 Meltem Tolunay 发表了自己的 CS224n 结业论文-- 用深度神经网络生成表情包(你没有看错 ...

  8. python制作会动的表情包_利用python图片生成,需10几行代码,生成的动态表情包(小黄鸭)...

    小编找到了10几行的,好玩的动态表情包生成的代码.分享分享! 这个程序怎么做呢?不要急,来听我给大家分析分析. 工具:程序环境 语言:Python 3.6 编辑器:Pycharm 程序步骤 实现字符动 ...

  9. 一行代码用表情包制作炫酷二维码,详细教程奉上,包学会

    想自己动手 制作一款专属的炫酷二维码吗? (初代奥特曼震场子) 咱们开始学习吧~ 1.用"运行-cmd"安装myqr包 基本环境是python 3.x,但建议学习python的同学 ...

最新文章

  1. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
  2. Java 10:“ var”关键字
  3. koa中上传文件到阿里云oss实现点击在线预览和下载
  4. java set取最大最小_Java中取得数组中最大(小)元素的几种实现方法
  5. 用堆栈和用递归分别实现倒序打印
  6. 傅里叶变换和拉普拉斯变换公式总结
  7. 设置Log4j配置文件路径
  8. 微信公众号二次开发框架-微擎
  9. Java中的Math函数常用方法都在这里
  10. 《图说区块链》读书笔记
  11. 课堂实验一 SQL基础练习
  12. 微信CRM系统哪家好?
  13. 交叉熵损失函数的计算公式
  14. leetcode 421. Maximum XOR of Two Numbers in an Array
  15. Bearer Token的相关定义与使用方法
  16. gnome显示桌面图标_gnome tweak tool 不显示桌面图标,为什么
  17. c 自动打印的服务器,您必须手动重新启动 APPC 打印会话对 AS/400 时配置打印会话重试设置为无限主机集成服务器 2009 年...
  18. 图文轻松理解计算机网络五层架构
  19. http://user.qzone.qq.com/383074470/blog/1270631840
  20. 数据挖掘-序列模式挖掘-PrefixSpan算法(ppt版本)

热门文章

  1. Ubuntu18.04安装Petalinux 2021.1
  2. android 将手机号中间隐藏为星号(*)和手机号码判断
  3. 社交网络分析——SNAP
  4. 软件AutoID Network Navigator设置基恩士扫码枪的使用教程
  5. MATLAB中逻辑类型详解
  6. Ubuntu16.04使用大恒工业相机
  7. idea打字变成繁体字
  8. 网上查询个人征信教程
  9. listView点击置顶操作
  10. 英伟达NX+rplidar S1 +cartographer