当前位置: 首页 > news >正文

用 Python 批量制造表情包,从此聊天斗图没输过

再也不怕群聊斗图了——写个脚本,一键生成 100 张自定义表情包,还能自动配上沙雕文字。
技术不一定改变世界,但一定能让你成为表情包之王。

一个尴尬的故事

有次我在群里和人斗图,对方连续甩出 5 张精准打击的表情包,而我翻遍手机只找到一张“熊猫头叹气”。
那一刻我意识到:表情包储备量,决定了社交话语权

但手动做图太慢。作为一个 Python 爱好者,我的第一反应不是去搜图库,而是:
能不能写个脚本,自动生成无限张带文字的表情包?

于是就有了下面这套“表情包军工厂”代码。
今天,我把它交给你——请理性使用,不要欺负手搓表情包的朋友。

准备工作

需要安装两个库:

pip install pillow imageio

  • Pillow:Python 最强大的图像处理库

  • imageio:用来生成 GIF(动图表情包)

另外,准备一张或几张空白表情包模板(比如熊猫头、沙雕猫、蘑菇头……可以去网上搜一套)。

功能一:给图片批量添加文字(表情包核心)

from PIL import Image, ImageDraw, ImageFont
import os

def add_text_to_image(image_path, text, output_path, font_size=40, position='bottom'):
img = Image.open(image_path)
draw = ImageDraw.Draw(img)

# 加载字体(可以用系统自带的,或者下载一个艺术字体)
try:
font = ImageFont.truetype("simhei.ttf", font_size) # 黑体
except:
font = ImageFont.load_default()

# 文字位置:底部居中或顶部居中
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
width, height = img.size

if position == 'bottom':
x = (width - text_width) // 2
y = height - text_height - 20
else:
x = (width - text_width) // 2
y = 20

# 添加黑色描边效果(先画阴影再画文字)
draw.text((x-2, y-2), text, font=font, fill='black')
draw.text((x+2, y-2), text, font=font, fill='black')
draw.text((x-2, y+2), text, font=font, fill='black')
draw.text((x+2, y+2), text, font=font, fill='black')
draw.text((x, y), text, font=font, fill='white')

img.save(output_path)
print(f"已生成: {output_path}")

# 批量生成
templates = ["panda.jpg", "cat.jpg", "mushroom.jpg"] # 你的模板列表
texts = ["我太难了", "就这?", "你有事吗", "离谱", "哈哈哈", "Python 牛逼", "摸鱼中勿扰"]

for i, template in enumerate(templates):
for j, text in enumerate(texts):
output = f"output/meme_{i}_{j}.png"
add_text_to_image(template, text, output, font_size=50)

运行后,output文件夹里多了几十张图,每一张都是表情包。从此斗图你只需要输入meme_1_3.png,手速碾压全场。

功能二:熊猫头经典模板——自动换脸(示例)

如果你有熊猫头的空白模板(大圆脸空白),可以在指定位置贴上别人的脸。
这里简化演示:将一张人脸图片缩放到合适大小,贴到模板的圆形区域内。

from PIL import Image

def paste_face_to_panda(face_path, panda_template_path, output_path):
panda = Image.open(panda_template_path).convert('RGBA')
face = Image.open(face_path).convert('RGBA')

# 缩放脸图
face = face.resize((120, 120))

# 创建圆形遮罩
mask = Image.new('L', (120, 120), 0)
mask_draw = ImageDraw.Draw(mask)
mask_draw.ellipse((0, 0, 120, 120), fill=255)

# 贴脸位置(根据你的模板手动调整偏移)
offset = (140, 100)
panda.paste(face, offset, mask)
panda.save(output_path)

这样你就能把朋友的照片做成熊猫头表情包了(谨慎使用,别被打)。

功能三:生成动态表情包(GIF)

静态图不够嚣张,动图才是终极武器。
我们取一张动图模板(比如“黑人问号”的几帧),然后在每一帧上添加相同的文字。

import imageio
from PIL import Image, ImageDraw, ImageFont

def add_text_to_gif(gif_path, text, output_path):
reader = imageio.get_reader(gif_path)
fps = reader.get_meta_data()['fps']
frames = []

for frame in reader:
img = Image.fromarray(frame).convert('RGBA')
draw = ImageDraw.Draw(img)
# 字体大小按比例
font_size = int(img.height / 10)
try:
font = ImageFont.truetype("simhei.ttf", font_size)
except:
font = ImageFont.load_default()

# 添加文字(底部居中)
bbox = draw.textbbox((0, 0), text, font=font)
w = bbox[2] - bbox[0]
h = bbox[3] - bbox[1]
x = (img.width - w) // 2
y = img.height - h - 20
draw.text((x, y), text, font=font, fill='white', stroke_width=2, stroke_fill='black')

frames.append(img)

# 保存 Gif
imageio.mimsave(output_path, [np.array(frame) for frame in frames], fps=fps)
print(f"动图表情包已保存: {output_path}")

注意:需要pip install imageio并且可能需要pip install imageio-ffmpeg

功能四:表情包生成器 + 随机组合

把以上功能打包成一个函数,然后随机从词库里抽词、从模板库里抽图,批量自动生成几百个表情包。

import random

word_bank = [
"加班", "改需求", "提测", "打回", "上线", "回滚",
"Python 是最好的语言", "PHP 才是", "你说的对", "但我选择躺平"
]
template_bank = ["panda.jpg", "cat_sad.jpg", "dog_confused.jpg"]

for i in range(100):
template = random.choice(template_bank)
text = random.choice(word_bank) + "?" if random.random() > 0.5 else random.choice(word_bank)
add_text_to_image(template, text, f"output/random_{i}.png")

一夜之间,你拥有了一个 100GB 的表情包库,斗图时随手丢一张,对方甚至怀疑你是人工智能。

进阶应用:自动爬取热词,生成当日热点表情包

配合爬虫抓取微博热搜或知乎热榜,自动生成当天热词的表情包,然后发到公司群里——
同事会觉得你不仅技术好,还特别紧跟时事。

import requests
from bs4 import BeautifulSoup

def get_weibo_hot():
url = 'https://s.weibo.com/top/summary'
headers = {'User-Agent': 'Mozilla/5.0'}
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')
hot_list = []
for td in soup.select('.td-02 a')[:10]:
hot_list.append(td.text)
return hot_list

hot_words = get_weibo_hot()
for idx, word in enumerate(hot_words):
add_text_to_image('template.jpg', word, f'hot_{idx}.png')

注意事项(法律 & 道德)

  • 请勿使用他人肖像制作侮辱性表情包,可能侵犯肖像权或名誉权。

  • 请勿制作包含违法内容的表情包。

  • 在公司群适度使用,避免被移出群聊。

结语

Python 能干很多事情:分析数据、训练模型、写网站。
但今天我展示的是它最“接地气”的一面——帮你快乐地摸鱼,用表情包征服群聊。

当你的同事还在手动打开美图秀秀时,你已经一键生成了 1000 张图。
当你的朋友还在问“这张图有没有字”时,你已经自动打了水印。

这,就是技术的降维打击。

现在,去下载几个空白模板,跑一下上面的代码,然后去群里炸场吧。
别忘了把成品留言给我看看——我斗图也很强,来呀。


附:如果你懒得找字体,可以用ImageFont.load_default(),但效果比较素。推荐下载simhei.ttf(黑体)或arial.ttf,放到代码同目录下。

http://www.jsqmd.com/news/706869/

相关文章:

  • AI模型部署效率提升210%,Docker AI Toolkit 2026到底重构了哪4层编排协议?
  • 阿里云国际站服务器DNS服务器设置成什么?服务器dns怎么填写?
  • 基于Qwen3.5-2B的智能日志聚合分析:从海量运维日志中快速定位问题
  • EasyAnimateV5图生视频部署:Nginx反向代理配置支持HTTPS与域名访问
  • Nixtla时间序列预测生态:统一接口、高速统计与深度学习模型实战
  • Phi-3.5-Mini-Instruct部署案例:高校AI教学实验平台轻量化部署方案
  • 成都地区、H型钢、400X200X8X13、Q235B、安泰、现货批发供应 - 四川盛世钢联营销中心
  • sklearn多核机器学习性能优化实战指南
  • C/C++:类型转换
  • 3步掌握ChanlunX缠论插件:通达信技术分析终极指南
  • 京东大屏AI手机+东东APP:银发智能,诚意够!
  • 成都地区、H型钢、350X350X12X19、Q235B、安泰、现货批发供应 - 四川盛世钢联营销中心
  • Ubuntu——常见基本命令
  • 2026绵阳玄关柜定制优质公司TOP5推荐:绵阳轻奢全屋定制/绵阳酒柜定制/绵阳阳台柜定制/绵阳高端家居定制/绵阳书房定制/选择指南 - 优质品牌商家
  • 教程太碎总失败?这篇Claude Code配置文:从Node.js到API调用一篇搞定(亲测跑通)(Windows系统)
  • 神经形态视觉传感器与3D堆叠计算架构解析
  • Vulkan GPU图像处理之幂律(伽马)变换:Kompute框架实战与性能分析
  • scikit-learn预测建模全流程解析与实战技巧
  • Docker技术入门与实战【2.6】
  • 机器学习中三大均值方法的应用与优化策略
  • Keras构建词汇级神经语言模型实战指南
  • 2026年Q2成都旧电脑专业回收标杆名录:成都回收/成都废旧金属回收/成都旧电脑回收/成都火锅店设备回收/成都酒店设备回收/选择指南 - 优质品牌商家
  • Real-ESRGAN-ncnn-vulkan:3分钟让模糊图像焕然新生的AI超分辨率神器
  • 北京通州比较好的学画画画画班推荐
  • 2026年Q2:防静电硫酸钙地板厂家、防静电陶瓷地板厂家、陶瓷防静电地板厂家、全钢防静电地板厂家、全铝防静电地板厂家选择指南 - 优质品牌商家
  • VCG 网格整形(Smoothed ARAP)
  • MemoryAgentBench:AI智能体记忆能力评估框架的设计与实践
  • 2026年4月26日论文再次规划
  • 微信AI双开方案:HermesClaw实现iLink协议代理与多AI助手集成
  • 为什么你的 devcontainer.json 总被面试官打叉?11个被忽略的 spec v2.0 兼容性细节,资深工程师私藏笔记