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

德州市纥源节能工程有限公司 2026/09/09 21:09:39

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

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

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

企业网站建设方案丹阳网站建设

作为高校助教,每年指导本科毕业论文时,我都会遇到相似的场景:学生手里攥着十几篇文献,眼神却充满迷茫;提纲写了三版,逻

2026/06/30 11:34:26

青岛网站建设福州网站建设

AutoGPT能否用于教学辅助?教师用户的使用反馈在一所重点中学的教研室里,一位高三化学老师正为即将到来的一轮复习焦头烂额。课程进度紧、学生基础参差不齐,传统

2026/06/30 12:08:59

福州网站建设南充网站建设

在当今企业级服务器管理场景中,网络隔离环境已成为常态。无论是金融行业的合规要求,还是制造企业的生产网络隔离,传统依赖在线安装的宝塔面板部署方式往往面临严峻挑战

2026/06/30 13:08:04

律师网站建设扬州网站建设

在数字化办公时代,电子签名已成为企业和个人日常工作的必备工具。然而,商业电子签名服务的高昂费用往往让人望而却步。OpenSign作为一款完全开源免费的电子签名平台ÿ

2026/06/30 10:03:48

网站建设制作邢台网站建设

5大理由告诉你为什么mpv.net是Windows最佳媒体播放器【免费下载链接】mpv.net🎞 mpv.net is a media player for Windows that

2026/06/30 10:34:50

深圳网站建设论坛巩义网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:设计一个VS2017插件管理器,支持一键安装、更新和配置高效开

2026/06/30 10:20:19

专业网站建设长春网站建设

第一章:MCP MLOps 工具概述MCP(Machine Learning Control Plane)MLOps 工具是一套专为机器学习生命周期管理设计的

2026/06/30 11:52:58

扬中网站建设建设企业网站

第一章:Open-AutoGLM 免费 vs 付费模式选择在部署 Open-AutoGLM 时,用户面临的关键决策之一是选择免费模式还是付费模式。这一选择直接影响模型性能、

2026/06/30 10:39:21

泰安网站建设中国建设部网站

它是一个开源框架,内置了完善的代理(Agent)架构,并且可以和各种模型、工具、外部系统无缝集成——你只需要写很少的代码,就能搭出

2026/06/30 14:09:39

宁波市网站建设句容网站建设

还记得那个让无数用户抓狂的alert弹窗吗?页面正浏览得酣畅淋漓,突然一个刺眼的弹窗跳出来,打断了所有思绪——“你确定要离开吗?”、“请填写必填

2026/06/30 14:05:08