开县网站建设赣州网站建设

铜鼓县赣丰汽运有限公司 2026/09/09 18:41:04

我帮你写了一个表情包批量生成器,用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" ✨ 生成完成!共{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)"确保印刷级质量

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

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

机械网站建设网站建设app

在那个信息转瞬即逝的数字时代,一条被撤回的通讯内容可能意味着永远失去关键信息。2016年,当微信首次推出消息撤回功能时,谁也没有想到这会催生出一个全新的技术领

2026/06/30 10:05:48

外贸网站建设江津网站建设

Maya动画重定向工具:3分钟学会跨角色动画迁移技术【免费下载链接】animation-retargeting-toolAnimation retargeting tool for Au

2026/06/30 13:53:08

西宁网站建设大庆网站建设

还在为电脑里堆积如山的重复文件而烦恼吗?存储空间告急,重要文件难找?dupeguru这款免费智能去重工具,将彻底改变你的文件管理方式。作为一款专

2026/06/30 14:14:09

东阳网站建设网站建设全包

“deadline 只剩 3 天,课程论文还没动笔?”“参考文献找了半天,格式混乱不知如何规范?”“写完查重率超标,改到崩溃还怕

2026/06/30 11:45:57

中国建设银行官方网站网站建设深圳

还在为每天重复发送相同消息而烦恼吗?手动操作不仅效率低下,还容易出错遗漏重要信息。YuYuWechat微信自动化工具为你提供了一套完整的智能解决方案,让消息发

2026/06/30 11:33:56

律师网站建设专业网站建设公司

探索重型车辆通信的钥匙:SAE J1939协议完整双语文档集【免费下载链接】SAEJ1939协议文档库完整版双语对照SAE J1939协议文档库(完整版,双语

2026/06/30 09:54:47

福田网站建设网站建设学校

在移动应用安全领域,设备完整性检测已成为保护商业利益和用户数据的关键防线。Play Integrity API Checker作为一款革命性的开源工具,通过Google官方

2026/06/30 11:07:24

网站建设空间东营网站建设

Linux 提供了各种命令来执行不同类型的系统关闭。然而,用于指代这些关闭类型的术语可能会让人困惑,尤其是对 Linux 新用户来说。在本文中,我们将讨论关闭

2026/06/30 11:16:54

杭州 网站建设网站建设咨询

深入了解面向组件的照明控制系统架构1. 照明控制接口的逻辑基础在照明控制系统中,可控制照明的房间接口(如IRemoteControlRoom和ISensorRoom)依赖于特定的逻辑。这些接口需要提供

2026/06/30 11:59:58

天津网站建设四川网站建设

FaceFusion人脸老化/年轻化功能实测效果惊艳在一张35岁女性的照片上滑动年龄条,她的面容缓缓变化:40岁、50岁、60岁……皮肤逐渐失去弹性,眼角细纹

2026/06/30 10:26:20