文章目录

  • 前言
  • 一、导入
  • 二、效果
  • 三、代码
  • 总结

前言

基于PIL,对已存有的表情包类型进行文字添加。需要下载包pillow。

通过对已定义的表情包模板,在群聊中进行表情包生成,插件下载在总结一栏。


一、导入

from PIL import Image, ImageDraw, ImageFont
import urllib.parse

二、效果

三、代码

1、图片生成

# 定义一个函数,从nonebot2机器人上获取两个信息,一个keys,一个text。keys为图片表情包类型,由于服务器上使用中文会出错,可以采用urllib.parse.quote(keys)进行转化,保证路径里的图片名称与keys转化后保持一致。text为你所要定义的文字。
# 注意,需要建立文件夹存储图片模板
def get_express_img(keys, text):keys = urllib.parse.quote(keys)path = f'/home/xiaochen/database/image/{keys}.jpg'im = Image.open(path)w, h = im.size# 导入文字字体,后面计算文字大小font = ImageFont.truetype(f'/home/xiaochen/database/Fronts/msyh.ttc', 25)  # 终端# 计算使用该字体占据的空间# 返回一个 tuple (width, height)# 分别代表这行字占据的宽和高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')f.paste(im, (0, 0))f.paste(bg, (0, (h - t_h)))# 这里可以保存你的表情包生成,可以采取时间来命名生成文件,或者事先定义生成的图片。# 引入时间区分文件名# x = time.localtime(time.time())# y = time.strftime('%Y%m%d%H%M%S', x)# img_path = f'{os.getcwd()}/src/plugins/make_express/database/image_express/{keys}{y}.jpg'  out_path = f'/home/xiaochen/database/image_express/output.jpg'f.save(str(out_path))

2、图片模板生成

from PIL import Image,ImageDraw,ImageFont# 图片生成
if __name__ == '__main__':im = Image.open("F:/image/xiongmaoA.jpg")  #340*252w, h = im.sizeprint(w,h)jgz = Image.open("F:/image/xiongmaoA1.jpg")  #135*130a, b = jgz.sizeprint(a,b)#z表示左右像素,w-a表示从左到右的位置,0表示顶格位置x = a+10y = b+10z = x+ag= y+bz=w-ar=h-b#(0,0,a,b)im1=im.paste(jgz,(z,0))im.show()im.save("F:/image/aoqi1.jpg")

3、nonebot2代码

expression = on_command('生成表情')@expression.handle()
async def handle_first_receive(bot: Bot, event: Event, state: T_State):args = str(event.get_message()).strip()if args:state["expression"] = args@expression.got("expression", prompt="生成表情包类型及语句(例如:奥奇1/给我爬)?")
async def handle_expression(bot: Bot, event: Event, state: T_State):msg = state["expression"]s = str.split(msg, "/")if str(len(s)) != "2":await expression.finish("输入格式有误,若要生成表情请参照格式Ov<")else:if int(len(s[1])) >= 13:await expression.finish("输入字数过多,效果不佳,建议重试Ov<")else:if str(s[0]) in list:get_express_img(str(s[0]), str(s[1]))# 图片路径请自行定义,win系统将下面file://{img_path}改为file:///{img_path}img_path = f'/home/xiaochen/src/plugins/make_express/database/image_express/output.jpg'img = MessageSegment.image(f'file://{img_path}')await expression.send(img)else:await expression.finish("生成表情范围有限Ov<")

总结

需要事先建立文件夹,传入你要生成的表情包模板。没有想要的表情包模板可以通过代码2进行自定义拼接。在定义完表情包生成函数后,只需要按照机器人格式进行图片发送即可。插件下载https://github.com/PnengChen/nonebot2

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

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

  1. nonebot2——表情包生成插件升级版

    文章目录 前言 一.增加内容 二.效果 三.修改 1.图片生成修改 2.nonebot2代码新增 总结 前言 基于PIL对图片进行修改,在前一文中是对通过对已定义的表情包模板,在群聊中进行表情包生成, ...

  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. python知识:QT5的move应用
  2. ORA-28000: the account is locked的解决办法
  3. transform的q、k、v的计算过程
  4. 浪点服务器芯片,浪点云服务器
  5. RabbitMQ 与 Erlang 安装与配置
  6. Item 27: 明白什么时候选择重载,什么时候选择universal引用
  7. 微信小程序引入iconfont图标
  8. 计算机在配置windows update,电脑开机出现配置Windows update怎么办
  9. 读取图像数据:通过append方法
  10. 学习云计算需要哪些软件,需要什么知识面?
  11. java 操作二进制_Java 二进制文件操作大全
  12. 计算机打字测试,打字测试
  13. 买房? 上区块链, 安排! 全国首张不动产区块链电子凭证诞生
  14. 《回话的技术》读后感
  15. 基于模拟退火算法的TSP算法
  16. Win11系统怎么关闭hyper-v虚拟机?
  17. 前端开发(html)
  18. nginx 地址重写
  19. XMail 安装配置使用 (1.27 )
  20. 【已解决】电脑插网线可以上网,但是显示黄色感叹号

热门文章

  1. MySQL全版本安装步骤
  2. matlab中求立方根,MATLAB基础入门
  3. 如何向公众号添加的百度网盘的链接
  4. 视频转图片-人脸识别-合成视频
  5. 基于树莓派CM4的三千兆+USB3.0扩展板硬件介绍
  6. 通过yarn命令查看日志
  7. 算法-详解堆排序算法
  8. DDOS攻击和发包攻击教学 (仅限于压力测试学习)
  9. VOA 2009年11月25日 星期三探索发现——全球街舞音乐尽显自我
  10. 基于java(springboot框架)的购物商城系统 毕业论文