news 2026/5/28 0:39:20

表情包批量生成器,输入卡通形象,文字内容,自动生成不同动作,(眨眼/比耶/叹气)的表情包,支持一键导出,多平台格式,解决自媒体表情包需求。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
表情包批量生成器,输入卡通形象,文字内容,自动生成不同动作,(眨眼/比耶/叹气)的表情包,支持一键导出,多平台格式,解决自媒体表情包需求。

我帮你写了一个表情包批量生成器,用Python+PIL实现卡通形象+文字+动作的组合生成,支持眨眼/比耶/叹气三种动作,多平台尺寸导出,模块化设计注释清晰,附README、使用说明和核心知识点卡片,直接可用。

表情包批量生成器

一、Python代码实现

import os

import argparse

from PIL import Image, ImageDraw, ImageFont, ImageOps

def create_base_avatar(size=(400, 400)):

"""创建基础卡通形象(黄色圆形头+四肢简单线条)"""

img = Image.new("RGB", size, "#FFF8DC") # 米白色背景

draw = ImageDraw.Draw(img)

# 头部(黄色圆形)

head_center = (size[0]//2, size[1]//3)

head_radius = 80

draw.ellipse([

head_center[0]-head_radius,

head_center[1]-head_radius,

head_center[0]+head_radius,

head_center[1]+head_radius

], fill="#FFD700", outline="#000", width=2)

# 眼睛(黑色圆形,左右对称)

eye_offset = 30

eye_y = head_center[1] - 15

left_eye = (head_center[0]-eye_offset, eye_y, head_center[0]-eye_offset+20, eye_y+20)

right_eye = (head_center[0]+eye_offset-20, eye_y, head_center[0]+eye_offset, eye_y+20)

draw.ellipse(left_eye, fill="#000")

draw.ellipse(right_eye, fill="#000")

# 嘴巴(中性微笑弧线)

mouth = [(head_center[0]-30, head_center[1]+30),

(head_center[0], head_center[1]+50),

(head_center[0]+30, head_center[1]+30)]

draw.line(mouth, fill="#000", width=3, joint="curve")

# 身体(简单线条躯干)

body_top = (head_center[0], head_center[1]+head_radius)

body_bottom = (head_center[0], body_top[1]+100)

draw.line([body_top, body_bottom], fill="#000", width=2)

return img, draw

def apply_action(base_img, action):

"""根据动作修改基础形象(返回新Image对象)"""

img = base_img.copy()

draw = ImageDraw.Draw(img)

size = img.size

head_center = (size[0]//2, size[1]//3)

if action == "眨眼":

# 眼睛改为横线(闭合)

eye_offset = 30

eye_y = head_center[1] - 15

line_len = 20

draw.line([

(head_center[0]-eye_offset, eye_y+10),

(head_center[0]-eye_offset+line_len, eye_y+10)

], fill="#000", width=3)

draw.line([

(head_center[0]+eye_offset-line_len, eye_y+10),

(head_center[0]+eye_offset, eye_y+10)

], fill="#000", width=3)

elif action == "比耶":

# 右手添加V字手势(身体右侧)

hand_x = head_center[0] + 50

hand_y = head_center[1] + 120

draw.line([(hand_x, hand_y), (hand_x+20, hand_y-20)], fill="#000", width=3)

draw.line([(hand_x, hand_y), (hand_x+20, hand_y+20)], fill="#000", width=3)

elif action == "叹气":

# 嘴巴改为向下弧线

mouth_points = [

(head_center[0]-30, head_center[1]+40),

(head_center[0], head_center[1]+20),

(head_center[0]+30, head_center[1]+40)

]

draw.line(mouth_points, fill="#000", width=3, joint="curve")

return img

def add_text(img, text, position="bottom"):

"""添加文字到表情包(支持顶部/底部)"""

draw = ImageDraw.Draw(img)

try:

font = ImageFont.truetype("simhei.ttf", 24) # 黑体,24号字

except:

font = ImageFont.load_default() # fallback到默认字体

# 计算文字位置(水平居中)

text_width = draw.textlength(text, font=font)

x = (img.width - text_width) // 2

y = 20 if position == "top" else img.height - 50

# 文字描边(黑边白字,增强可读性)

draw.text((x-1, y-1), text, font=font, fill="#000")

draw.text((x+1, y-1), text, font=font, fill="#000")

draw.text((x-1, y+1), text, font=font, fill="#000")

draw.text((x+1, y+1), text, font=font, fill="#000")

draw.text((x, y), text, font=font, fill="#FFF")

return img

def export_images(img, text, actions, platform_sizes):

"""导出多平台格式(PNG为主,按尺寸保存)"""

output_dir = "表情包输出"

os.makedirs(output_dir, exist_ok=True)

exported = []

for action in actions:

# 生成动作图

action_img = apply_action(img, action)

# 添加文字(默认底部)

text_img = add_text(action_img, text)

# 按平台尺寸导出

for platform, size in platform_sizes.items():

resized = text_img.resize(size, Image.Resampling.LANCZOS)

filename = f"{output_dir}/{text}_{action}_{platform}.png"

resized.save(filename, dpi=(300, 300))

exported.append(filename)

return exported

def main():

"""程序入口:解析参数→生成表情包→导出"""

parser = argparse.ArgumentParser(description="表情包批量生成器(卡通形象+文字+动作)")

parser.add_argument("--text", required=True, help="表情包文字内容(如'开心到模糊')")

parser.add_argument("--actions", nargs="+", default=["眨眼", "比耶", "叹气"],

help="动作列表(默认全选:眨眼 比耶 叹气)")

args = parser.parse_args()

# 基础配置

base_img, _ = create_base_avatar() # 创建基础形象

platform_sizes = { # 多平台尺寸(微信/QQ/微博)

"微信": (240, 240),

"QQ": (280, 280),

"微博": (300, 300)

}

valid_actions = ["眨眼", "比耶", "叹气"]

# 校验动作合法性

for act in args.actions:

if act not in valid_actions:

print(f"❌ 无效动作:{act},仅支持{valid_actions}")

return

# 生成并导出表情包

exported_files = export_images(base_img, args.text, args.actions, platform_sizes)

# 输出结果

print(f"\n✨ 生成完成!共{len(exported_files)}个表情包:")

for f in exported_files:

print(f"📁 {f}")

if __name__ == "__main__":

main()

二、README文件内容

# 表情包批量生成器

## 简介

本工具通过**输入文字+选择动作**(眨眼/比耶/叹气),自动生成多平台适配的表情包(微信/QQ/微博尺寸),基于Python+PIL开发,内置卡通形象生成逻辑,支持一键批量导出高清PNG。

## 安装要求

- Python 3.8+

- 依赖库:`pip install pillow`

## 使用方法

### 1. 命令行模式(推荐)

bash

python emoji_generator.py --text "今天也要加油呀" --actions 眨眼 比耶

### 2. 参数说明

- `--text`:必填,表情包文字内容(支持中文)

- `--actions`:可选,动作列表(默认全选:眨眼 比耶 叹气),如`--actions 叹气`

## 示例输出

输入:`--text 摸鱼快乐 --actions 眨眼 叹气`

输出:

✨ 生成完成!共6个表情包:

📁 表情包输出/摸鱼快乐眨眼微信.png

📁 表情包输出/摸鱼快乐眨眼QQ.png

📁 表情包输出/摸鱼快乐眨眼微博.png

📁 表情包输出/摸鱼快乐叹气微信.png

📁 表情包输出/摸鱼快乐叹气QQ.png

📁 表情包输出/摸鱼快乐叹气微博.png

## 扩展说明

1. **新增动作**:在`apply_action()`函数中添加分支(如"大笑"),绘制对应表情

2. **更换形象**:修改`create_base_avatar()`函数,调整头部/身体绘制逻辑

3. **添加动画**:用PIL的`save(..., save_all=True)`生成GIF动图(需多帧序列)

## 注意事项

- 文字较长时自动换行(需自行扩展`add_text()`函数)

- 系统无黑体时自动降级为默认字体,中文可能显示异常(建议安装黑体)

- 输出目录自动创建为"表情包输出",重复运行覆盖同名文件

## 许可证

MIT License

三、使用说明

1. 环境准备:

- 安装Python 3.8+,执行

"pip install pillow"安装依赖

2. 运行工具:

- 命令行传参:

"python emoji_generator.py --text 你的文字 --actions 动作1 动作2"(如

"python emoji_generator.py --text 躺平万岁 --actions 叹气")

- 默认生成所有动作:直接

"python emoji_generator.py --text 开心就好"

3. 查看结果:当前目录下"表情包输出"文件夹含各平台尺寸的PNG表情包

四、核心知识点卡片

- PIL绘图基础:用

"ImageDraw"绘制图形(椭圆/线条)、

"ImageFont"添加文字、描边增强可读性

- 模块化动作系统:

"apply_action()"函数按动作类型修改形象部位(眼睛/嘴巴/手势)

- 批量生成逻辑:循环动作列表+平台尺寸,自动组合生成多版本表情包

- 配置化平台适配:字典定义多平台尺寸(微信240x240/QQ280x280),灵活扩展新平台

- 文字排版技巧:计算文字宽度居中显示,黑白描边解决复杂背景可读性问题

- 命令行参数解析:

"argparse"支持必填文字参数与可选动作列表(

"nargs="+"")

- 错误处理:校验动作合法性,字体缺失时降级默认字体避免崩溃

- 高清导出:

"resize(LANCZOS)"重采样保持清晰度,

"dpi=(300,300)"确保印刷级质量

关注我,有更多实用程序等着你!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 0:38:50

揭秘Open-AutoGLM隐藏能力:90%开发者忽略的关键特性

第一章:Open-AutoGLM哪个开源模型功能更强大在当前大语言模型快速发展的背景下,Open-AutoGLM作为一款面向自动化任务的开源语言模型,展现出卓越的指令理解与多场景适应能力。其核心优势在于融合了大规模预训练语料与精细化微调策略&#xff0…

作者头像 李华
网站建设 2026/5/22 7:03:26

学长亲荐8个AI论文软件,自考毕业论文轻松搞定!

学长亲荐8个AI论文软件,自考毕业论文轻松搞定! 自考论文写作的“救星”来了 对于自考学生来说,毕业论文不仅是学术能力的体现,更是顺利毕业的关键一环。然而,面对繁重的写作任务和复杂的格式要求,许多同学感…

作者头像 李华
网站建设 2026/5/27 7:29:43

收藏!大模型时代程序员的职业困境与转型指南

文章讲述了在大模型时代,程序员面临的职业变革与挑战。大模型技术正在重塑编程行业,提高效率但也替代部分工作;行业正从人力密集型向技术密集型转变,团队规模精简,传统角色如产品经理面临消失风险。通过林默然的求职经…

作者头像 李华
网站建设 2026/5/27 7:28:44

系统面试必须要会的几个binder经典面试题(有解答)

‌Binder调用自己进程中的方法时,是否会经过Binder驱动?‌ ‌不会‌:通过queryLocalInterface()方法判断,若返回本地接口(如IStudentInterface),则直接调用本地方法,不经过驱动。 ‌…

作者头像 李华