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

做程序自动生成朋友圈配图文案,风格统一,颠覆发图没素材。

数字文化艺术创新创业 - 朋友圈配图文案自动生成器

📁 项目结构

art_creativity_poster/

├── main.py # 主程序入口

├── config/

│ └── config.py # 配置文件

├── core/

│ ├── text_generator.py # 文案生成器

│ ├── image_creator.py # 图片生成器

│ └── style_manager.py # 风格管理器

├── data/

│ └── templates.json # 文案模板库

├── output/ # 输出目录

├── utils/

│ └── helpers.py # 工具函数

├── README.md # 项目说明

└── requirements.txt # 依赖包

📄 核心代码实现

1. 配置文件 (config/config.py)

"""

数字文化艺术创新创业 - 朋友圈配图文案生成器

配置文件模块

包含:主题词库、风格配置、输出设置

"""

from dataclasses import dataclass, field

from typing import List, Dict, Optional

import json

@dataclass

class ArtStyle:

"""艺术风格配置类"""

name: str # 风格名称

color_scheme: List[str] # 主色调

font_style: str # 字体风格

emoji_set: List[str] # 配套emoji

description: str # 风格描述

def to_dict(self) -> Dict:

return {

"name": self.name,

"color_scheme": self.color_scheme,

"font_style": self.font_style,

"emoji_set": self.emoji_set,

"description": self.description

}

@dataclass

class PostConfig:

"""朋友圈配文配置类"""

# 基础信息

author_name: str = "艺创小助手"

course_name: str = "数字文化艺术创新创业"

# 主题词库 - 结合课程内容

themes: Dict[str, List[str]] = field(default_factory=lambda: {

"传统文化创新": [

"非遗活化", "古韵新绎", "匠心传承",

"国潮复兴", "文化解码", "东方美学",

"老手艺新生", "传统IP再造"

],

"数字技术融合": [

"AI绘画", "元宇宙展厅", "区块链确权",

"VR沉浸体验", "数字孪生", "算法美学",

"智能文创", "虚实共生"

],

"创新创业实践": [

"文创孵化", "跨界联名", "社群共创",

"场景革命", "商业模式画布", "最小可行性产品",

"文化消费升级", "可持续运营"

],

"艺术设计表达": [

"视觉叙事", "符号重构", "色彩心理学",

"版式韵律", "动态设计", "感官体验",

"情感共鸣", "美学经济"

]

})

# 文案模板库

templates: Dict[str, List[str]] = field(default_factory=lambda: {

"inspiration": [ # 灵感启发型

"今天的{theme}探索,让我重新定义了艺术的边界 🎨\n\n"

"在数字文化的浪潮中,{keyword}不再是遥远的概念,而是触手可及的创作工具。"

"作为{role},我们正在用代码编织诗意,用算法唤醒传统。\n\n"

"#数字文化艺术创新创业 #{theme} #{keyword}",

"当{theme}遇上创新思维,会碰撞出怎样的火花?💫\n\n"

"{keyword}的实践告诉我:文化传承不是复制,而是重生。"

"每一次迭代都在逼近心中的完美表达。\n\n"

"#艺创日常 #{theme} #{keyword}"

],

"progress": [ # 进度分享型

"🚀 {theme}项目阶段性汇报\n\n"

"本周突破:成功将{keyword}融入设计方案\n"

"技术栈:Python + Pillow + 创意思维\n"

"感悟:创新就是把不可能变成可能 ✨\n\n"

"下一站:深化用户体验测试 📍\n\n"

"#创业日记 #{theme}",

"进度条 ████████░░ 80%\n\n"

"{theme}原型已上线!\n"

"亮点功能:{keyword}\n"

"从0到1的路上,每一个bug都是成长的印记 💻\n\n"

"#创客日志 #{theme}"

],

"reflection": [ # 深度思考型

"深夜思考 🌙\n\n"

"在数字文化艺术创新创业的课程中,我逐渐明白:"

"{keyword}的本质不是炫技,而是连接——连接传统与现代,连接技术与人文。\n\n"

"真正的创新者,既是技术的驾驭者,也是文化的守护者。\n\n"

"#深度思考 #{theme}",

"关于{theme}的三个顿悟时刻 💡\n\n"

"1️⃣ {keyword}让抽象概念可视化\n"

"2️⃣ 用户故事比功能列表更重要\n"

"3️⃣ 商业价值与文化价值的平衡点\n\n"

"继续在艺创路上修行 🎯\n\n"

"#课程感悟 #{theme}"

]

})

# 艺术风格预设

styles: Dict[str, ArtStyle] = field(default_factory=lambda: {

"modern_minimalist": ArtStyle(

name="现代极简",

color_scheme=["#2C3E50", "#ECF0F1", "#3498DB"],

font_style="思源黑体 Medium",

emoji_set=["✨", "🎨", "💫", "🚀"],

description="简约线条,留白艺术,突出文字力量"

),

"traditional_chinese": ArtStyle(

name="东方韵味",

color_scheme=["#8B4513", "#DAA520", "#F5DEB3"],

font_style="方正清刻本悦宋",

emoji_set=["🌸", "🏮", "🎋", "🖌️"],

description="水墨意境,古朴典雅,文化传承"

),

"cyber_future": ArtStyle(

name="赛博未来",

color_scheme=["#00FFFF", "#FF00FF", "#000033"],

font_style="阿里妈妈数黑体",

emoji_set=["🔮", "⚡", "🌐", "🤖"],

description="霓虹光影,科技感十足,前沿探索"

),

"warm_handmade": ArtStyle(

name="温暖手工",

color_scheme=["#D2691E", "#FFE4C4", "#8B7355"],

font_style="汉仪小麦体",

emoji_set=["👐", "🧶", "🎭", "❤️"],

description="质感纹理,亲切温暖,匠心呈现"

)

})

# 输出配置

output_config: Dict = field(default_factory=lambda: {

"image_width": 1080,

"image_height": 1080,

"dpi": 300,

"format": "PNG",

"text_position": "center",

"watermark": True

})

# 全局配置实例

CONFIG = PostConfig()

def load_custom_templates(filepath: str) -> None:

"""

加载自定义模板文件

Args:

filepath: JSON模板文件路径

Raises:

FileNotFoundError: 文件不存在

json.JSONDecodeError: JSON解析错误

"""

try:

with open(filepath, 'r', encoding='utf-8') as f:

custom_data = json.load(f)

# 合并自定义模板

if "templates" in custom_data:

for category, templates in custom_data["templates"].items():

if category in CONFIG.templates:

CONFIG.templates[category].extend(templates)

else:

CONFIG.templates[category] = templates

print(f"✅ 成功加载 {len(custom_data.get('templates', {}))} 个自定义模板类别")

except FileNotFoundError:

print(f"⚠️ 自定义模板文件未找到: {filepath}")

except json.JSONDecodeError as e:

print(f"⚠️ 模板文件JSON解析错误: {e}")

if __name__ == "__main__":

# 测试配置加载

print("=" * 50)

print("数字文化艺术创新创业 - 配图文案生成器配置")

print("=" * 50)

print(f"\n📚 课程主题数: {len(CONFIG.themes)}")

for theme, keywords in CONFIG.themes.items():

print(f" • {theme}: {len(keywords)} 个关键词")

print(f"\n🎨 艺术风格数: {len(CONFIG.styles)}")

for style_name, style in CONFIG.styles.items():

print(f" • {style.name}: {style.color_scheme}")

print(f"\n📝 文案模板数: {sum(len(t) for t in CONFIG.templates.values())}")

2. 文案生成器 (core/text_generator.py)

"""

文案生成器模块

核心功能:根据主题、风格、类型生成朋友圈配文

运用数字文化艺术创新创业课程方法论

"""

import random

from datetime import datetime

from typing import Dict, List, Optional, Tuple

from config.config import CONFIG

class TextGenerator:

"""

朋友圈配图文案生成器

设计理念:

1. 结合课程中的"文化元素提取法"

2. 运用"故事化表达"技巧

3. 融入"品牌人格化"策略

Attributes:

config: 全局配置对象

used_combinations: 已使用的组合记录(避免重复)

"""

def __init__(self):

self.config = CONFIG

self.used_combinations: set = set()

self._initialize_role_library()

def _initialize_role_library(self) -> None:

"""

初始化角色词库

基于课程"个人品牌定位"章节

"""

self.roles = [

"数字文化探索者",

"艺创实践者",

"文化科技融合者",

"非遗创新传承人",

"元宇宙策展人",

"文创产品经理",

"视觉叙事设计师",

"创意技术开发者"

]

def generate_post_text(

self,

theme_category: str,

style_name: str,

post_type: str = "inspiration",

custom_keyword: Optional[str] = None,

add_timestamp: bool = True

) -> Dict:

"""

生成完整的朋友圈配图文案

Args:

theme_category: 主题类别(如"传统文化创新")

style_name: 艺术风格名称

post_type: 文案类型(inspiration/progress/reflection)

custom_keyword: 自定义关键词(可选)

add_timestamp: 是否添加时间戳

Returns:

Dict: 包含文案、元数据、标签的完整信息

Raises:

ValueError: 无效的参数值

"""

# 参数验证

self._validate_inputs(theme_category, style_name, post_type)

# 获取主题关键词

keyword = custom_keyword or self._select_keyword(theme_category)

# 构建文案组合键(避免重复)

combo_key = (theme_category, style_name, post_type, keyword)

if combo_key in self.used_combinations and not custom_keyword:

# 尝试重新选择关键词

keyword = self._select_keyword(theme_category, exclude=[keyword])

combo_key = (theme_category, style_name, post_type, keyword)

self.used_combinations.add(combo_key)

# 获取风格配置

style = self.config.styles[style_name]

# 选择模板并填充

template = self._select_template(post_type)

filled_text = self._fill_template(template, theme_category, keyword, style)

# 添加时间戳和标签

final_text = self._add_metadata(filled_text, add_timestamp)

# 生成标签

tags = self._generate_tags(theme_category, keyword, style_name)

return {

"text": final_text,

"metadata": {

"theme_category": theme_category,

"keyword": keyword,

"style": style.name,

"post_type": post_type,

"generated_at": datetime.now().isoformat(),

"character_count": len(final_text),

"estimated_read_time": len(final_text) // 30 # 平均阅读速度

},

"tags": tags,

"style_colors": style.color_scheme,

"emojis": style.emoji_set

}

def _validate_inputs(

self,

theme_category: str,

style_name: str,

post_type: str

) -> None:

"""验证输入参数的有效性"""

valid_themes = list(self.config.themes.keys())

valid_styles = list(self.config.styles.keys())

valid_types = list(self.config.templates.keys())

errors = []

if theme_category not in valid_themes:

errors.append(f"无效的主题类别。有效选项: {valid_themes}")

if style_name not in valid_styles:

errors.append(f"无效的艺术风格。有效选项: {valid_styles}")

if post_type not in valid_types:

errors.append(f"无效的文案类型。有效选项: {valid_types}")

if errors:

raise ValueError("\n".join(errors))

def _select_keyword(

self,

theme_category: str,

exclude: Optional[List[str]] = None

) -> str:

"""

从主题类别中随机选择一个关键词

运用课程中的"随机选择+人工筛选"策略

"""

keywords = self.config.themes[theme_category].copy()

if exclude:

keywords = [k for k in keywords if k not in exclude]

return random.choice(keywords)

def _select_template(self, post_type: str) -> str:

"""随机选择一个文案模板"""

templates = self.config.templates[post_type]

return random.choice(templates)

def _fill_template(

self,

template: str,

theme_category: str,

keyword: str,

style: CONFIG.styles.__class__

) -> str:

"""

填充模板占位符

占位符说明:

{theme} - 主题类别名称

{keyword} - 具体关键词

{role} - 随机角色身份

{emoji} - 风格匹配的emoji

"""

role = random.choice(self.roles)

emoji = random.choice(style.emoji_set)

replacements = {

"{theme}": theme_category,

"{keyword}": keyword,

"{role}": role,

"{emoji}": emoji

}

result = template

for placeholder, value in replacements.items():

result = result.replace(placeholder, value)

return result

def _add_metadata(self, text: str, add_timestamp: bool) -> str:

"""添加元数据和时间戳"""

if add_timestamp:

timestamp = datetime.now().strftime("%m.%d %H:%M")

text += f"\n\n📍 {timestamp}"

return text

def _generate_tags(

self,

theme_category: str,

keyword: str,

style_name: str

) -> List[str]:

"""生成社交媒体标签"""

base_tags = ["数字文化艺术创新创业"]

# 主题标签

theme_tag = theme_category.replace(" ", "")

base_tags.append(f"#{theme_tag}")

# 关键词标签

keyword_tag = keyword.replace(" ", "").replace("·", "")

base_tags.append(f"#{keyword_tag}")

# 风格标签

style_tag = style_name.replace("_", "")

base_tags.append(f"#{style_tag}")

# 通用标签

base_tags.extend(["#艺创日常", "#创客精神"])

return base_tags[:8] # 限制标签数量

def batch_generate(

self,

count: int,

theme_category: Optional[str] = None,

style_name: Optional[str] = None,

post_type: Optional[str] = None

) -> List[Dict]:

"""

批量生成多条文案

Args:

count: 生成数量

theme_category: 限定主题(可选)

style_name: 限定风格(可选)

post_type: 限定类型(可选)

Returns:

List[Dict]: 文案列表

"""

results = []

attempts = 0

max_attempts = count * 3 # 防止无限循环

while len(results) < count and attempts < max_attempts:

attempts += 1

# 随机选择或使用指定参数

tc = theme_category or random.choice(list(self.config.themes.keys()))

sn = style_name or random.choice(list(self.config.styles.keys()))

pt = post_type or random.choice(list(self.config.templates.keys()))

try:

post = self.generate_post_text(tc, sn, pt)

results.append(post)

print(f"✅ 生成第 {len(results)}/{count} 条文案")

except Exception as e:

print(f"⚠️ 生成失败: {e}")

continue

return results

def get_available_options(self) -> Dict:

"""获取所有可用的选项列表"""

return {

"theme_categories": list(self.config.themes.keys()),

"styles": [

{"key": k, "name": v.name, "colors": v.color_scheme}

for k, v in self.config.styles.items()

],

"post_types": list(self.config.templates.keys()),

"roles": self.roles

}

# 使用示例和测试

if __name__ == "__main__":

generator = TextGenerator()

print("=" * 60)

print("文案生成器测试")

print("=" * 60)

# 测试单条文案生成

print("\n📝 单条文案生成测试:")

result = generator.generate_post_text(

theme_category="传统文化创新",

style_name="traditional_chinese",

post_type="inspiration"

)

print(f"\n文案内容:\n{result['text']}")

print(f"\n元数据:\n{json.dumps(result['metadata'], indent=2, ensure_ascii=False)}")

print(f"\n标签: {' '.join(result['tags'])}")

# 测试批量生成

print("\n" + "=" * 60)

print("批量生成测试 (3条):")

print("=" * 60)

batch_results = generator.batch_generate(count=3)

for i, post in enumerate(batch_results, 1):

print(f"\n--- 第{i}条 ---")

print(f"主题: {post['metadata']['theme_category']}")

print(f"关键词: {post['metadata']['keyword']}")

print(f"风格: {post['metadata']['style']}")

print(f"预览: {post['text'][:100]}...")

# 显示可用选项

print("\n" + "=" * 60)

print("可用选项:")

print("=" * 60)

options = generator.get_available_options()

print(f"主题类别: {options['theme_categories']}")

print(f"文案类型: {options['post_types']}")

3. 图片生成器 (core/image_creator.py)

"""

图片生成器模块

基于Pillow库创建朋友圈配图

支持多种艺术风格模板

"""

from PIL import Image, ImageDraw, ImageFont, ImageFilter

from PIL.ImageColor import getrgb

from typing import Dict, Tuple, Optional

from config.config import CONFIG

import os

import math

class ImageCreator:

"""

朋友圈配图生成器

核心特性:

1. 支持多种艺术风格预设

2. 动态文字排版系统

3. 装饰元素自动布局

4. 高清输出适配朋友圈规格

Attributes:

config: 全局配置

canvas_width: 画布宽度

canvas_height: 画布高度

"""

def __init__(self):

self.config = CONFIG.output_config

self.canvas_width = self.config["image_width"]

self.canvas_height = self.config["image_height"]

self.dpi = self.config["dpi"]

# 字体缓存

self._font_cache: Dict[str, ImageFont.FreeTypeFont] = {}

# 确保输出目录存在

os.makedirs("output", exist_ok=True)

def create_post_image(

self,

text_content: str,

style_name: str,

title: Optional[str] = None,

subtitle: Optional[str] = None,

save_path: Optional[str] = None

) -> str:

"""

创建朋友圈配图

Args:

text_content: 文案主体内容

style_name: 艺术风格名称

title: 标题(可选)

subtitle: 副标题(可选)

save_path: 保存路径(可选)

Returns:

str: 生成的图片文件路径

"""

# 获取风格配置

style = self.config.styles[style_name]

# 创建画布

canvas = self._create_canvas(style.color_scheme)

# 绘制背景纹理

self._draw_background_texture(canvas, style_name)

# 绘制装饰元素

self._draw_decorative_elements(canvas, style)

# 绘制文字内容

self._draw_text_content(canvas, text_content, style, title, subtitle)

# 添加水印

if self.config["watermark"]:

self._add_watermark(canvas)

# 保存图片

filename = save_path or self._generate_filename(style_name)

full_path = os.path.join("output", filename)

canvas.save(full_path, format=self.config["format"], dpi=(self.dpi, self.dpi))

print(f"✅ 图片已保存: {full_path}")

return full_path

def _create_canvas(self, color_scheme: List[str]) -> Image.Image:

"""

创建渐变背景画布

运用课程中的"色彩心理学"原理:

- 主色传达情感基调

- 辅色增强层次感

- 渐变营造空间深度

"""

canvas = Image.new(

mode="RGB",

size=(self.canvas_width, self.canvas_height),

color=color_scheme[0]

)

# 创建渐变效果

draw = ImageDraw.Draw(canvas)

for y in range(self.canvas_height):

# 计算渐变比例

ratio = y / self.canvas_height

# 在两个主色之间插值

if len(color_scheme) >= 2:

color1 = getrgb(color_scheme[0])

color2 = getrgb(color_scheme[1])

r = int(color1[0] + (color2[0] - color1[0]) * ratio)

g = int(color1[1] + (color2[1] - color1[1]) * ratio)

b = int(color1[2] + (color2[2] - color1[2]) * ratio)

draw.line([(0, y), (self.canvas_width, y)], fill=(r, g, b))

return canvas

def _draw_background_texture(self, canvas: Image.Image, style_name: str) -> None:

"""

绘制背景纹理

不同风格对应不同的纹理效果

"""

width, height = canvas.size

texture_layer = Image.new("RGBA", (width, height), (0, 0, 0, 0))

draw = ImageDraw.Draw(texture_layer)

if style_name == "modern_minimalist":

# 几何线条纹理

for i in range(0, width, 100):

alpha = int(255 * 0.05)

draw.line([(i, 0), (i, height)], fill=(255, 255, 255, alpha), width=1)

for j in range(0, height, 100):

draw.line([(0, j), (width, j)], fill=(255, 255, 255, alpha), width=1)

elif style_name == "traditional_chinese":

# 水墨晕染效果

for _ in range(20):

x = random.randint(0, width)

y = random.randint(0, height)

radius = random.randint(30, 150)

alpha = random.randint(10, 40)

draw.ellipse(

[(x - radius, y - radius), (x + radius, y + radius)],

fill=(0, 0, 0, alpha)

)

# 应用模糊

texture_layer = texture_layer.filter(ImageFilter.GaussianBlur(radius=20))

elif style_name == "cyber_future":

# 网格和光点

for i in range(0, width, 50):

draw.line([(i, 0), (i, height)], fill=(0, 255, 255, 30), width=1)

for j in range(0, height, 50):

draw.line([(0, j), (width, j)], fill=(0, 255, 255, 30),

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

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

相关文章:

  • 导师严选!自考必备的AI论文工具 —— 千笔ai写作
  • 用实力说话备受追捧的降AIGC网站 —— 千笔·降AIGC助手
  • 编写自动把小说转成分镜头脚本,颠覆编剧要专业训练的程序。
  • 交稿前一晚!8个AI论文平台测评:专科生毕业论文写作全攻略
  • 全球AI大模型的结构性危机与重构路径:从智能到智慧的范式转移
  • 改稿速度拉满!实力封神的降AIGC平台 —— 千笔·降AIGC助手
  • 身份证多角度识别与检测模型优化-C3k2模块与HDRAB算法
  • 2026年礼堂椅选购指南:盘点国内优质厂家,礼堂椅实木扶手/幼儿园礼堂椅/礼堂椅会议室椅,礼堂椅供应厂家如何选 - 品牌推荐师
  • ComfyUI 更新后 ModuleNotFoundError: No module named ‘pkg_resources‘报错修复指南
  • Visual Model Checking Graph-Based Inference of Visual Routines for Image Retrieval
  • V汤泉优惠购
  • TimeOmni-VL Unified Models for Time Series Understanding and Generation
  • 【小沐杂货铺】基于Three.js渲染三维无人机Drone(WebGL / vue / react )
  • The Emergence of Lab-Driven Alignment Signatures A Psychometric Framework for Auditing Latent Bias a
  • 香港中巴租赁公司体验:2026年实地考察报告,包车/商务租车/跨境包车/租车/代驾租车/粤港澳包车,租赁企业找哪家 - 品牌推荐师
  • Manacher 的一个优雅结论
  • 220
  • ABAQUS模型:基于CEL算法的桩入土的粒子示踪技术。 使用abaqus的cel流固耦合算法
  • 用数据说话 9个AI论文工具测评:专科生毕业论文写作必备神器
  • 计算机毕业设计 | SpringBoot+vue企业员工薪酬关系管理系统(附源码+论文)
  • 科伦博泰:默沙东启动芦康沙妥珠单抗第17项全球三期临床
  • 求助,《信号与系统》是做什么的?
  • 计算机毕业设计 | SpringBoot+vue学生网上选课系统 学生成绩管理(附源码+论文)
  • 照着用就行:更贴合本科生的降AIGC工具,千笔·降AIGC助手 VS Checkjie
  • 2026热门斜齿轮减速机实力厂家排行,有联系电话哦,实心轴齿轮减速机/伺服减速机/立式齿轮减速机,斜齿轮减速机厂商电话 - 品牌推荐师
  • 11]delphi中 RichEdit1设置行距
  • 工业网带怎么选?这些国产品牌值得关注,上料提升机/链板提升机/平顶链板/皮带输送机/网带提升机,网带产品推荐榜 - 品牌推荐师
  • 计算机毕业设计 | SpringBoot+vue校园资产管理 高校财务管理系统(附源码+论文)
  • 参考文献崩了?8个AI论文网站测评:本科生毕业论文写作全攻略
  • 计算机毕业设计 | SpringBoot+vue智慧校园之家 家长教师联系管理平台(附源码+论文)