做程序自动生成朋友圈配图文案,风格统一,颠覆发图没素材。
数字文化艺术创新创业 - 朋友圈配图文案自动生成器 项目结构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, fieldfrom typing import List, Dict, Optionalimport jsondataclassclass ArtStyle:艺术风格配置类name: str # 风格名称color_scheme: List[str] # 主色调font_style: str # 字体风格emoji_set: List[str] # 配套emojidescription: 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}dataclassclass PostConfig:朋友圈配文配置类# 基础信息author_name: str 艺创小助手course_name: str 数字文化艺术创新创业# 主题词库 - 结合课程内容themes: Dict[str, List[str]] field(default_factorylambda: {传统文化创新: [非遗活化, 古韵新绎, 匠心传承,国潮复兴, 文化解码, 东方美学,老手艺新生, 传统IP再造],数字技术融合: [AI绘画, 元宇宙展厅, 区块链确权,VR沉浸体验, 数字孪生, 算法美学,智能文创, 虚实共生],创新创业实践: [文创孵化, 跨界联名, 社群共创,场景革命, 商业模式画布, 最小可行性产品,文化消费升级, 可持续运营],艺术设计表达: [视觉叙事, 符号重构, 色彩心理学,版式韵律, 动态设计, 感官体验,情感共鸣, 美学经济]})# 文案模板库templates: Dict[str, List[str]] field(default_factorylambda: {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\n1️⃣ {keyword}让抽象概念可视化\n2️⃣ 用户故事比功能列表更重要\n3️⃣ 商业价值与文化价值的平衡点\n\n继续在艺创路上修行 \n\n#课程感悟 #{theme}]})# 艺术风格预设styles: Dict[str, ArtStyle] field(default_factorylambda: {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_factorylambda: {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, encodingutf-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] templatesprint(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 randomfrom datetime import datetimefrom typing import Dict, List, Optional, Tuplefrom config.config import CONFIGclass TextGenerator:朋友圈配图文案生成器设计理念1. 结合课程中的文化元素提取法2. 运用故事化表达技巧3. 融入品牌人格化策略Attributes:config: 全局配置对象used_combinations: 已使用的组合记录避免重复def __init__(self):self.config CONFIGself.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/reflectioncustom_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} - 风格匹配的emojirole random.choice(self.roles)emoji random.choice(style.emoji_set)replacements {{theme}: theme_category,{keyword}: keyword,{role}: role,{emoji}: emoji}result templatefor placeholder, value in replacements.items():result result.replace(placeholder, value)return resultdef _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 textdef _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 0max_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})continuereturn resultsdef 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_nametraditional_chinese,post_typeinspiration)print(f\n文案内容:\n{result[text]})print(f\n元数据:\n{json.dumps(result[metadata], indent2, ensure_asciiFalse)})print(f\n标签: { .join(result[tags])})# 测试批量生成print(\n * 60)print(批量生成测试 (3条):)print( * 60)batch_results generator.batch_generate(count3)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, ImageFilterfrom PIL.ImageColor import getrgbfrom typing import Dict, Tuple, Optionalfrom config.config import CONFIGimport osimport mathclass ImageCreator:朋友圈配图生成器核心特性1. 支持多种艺术风格预设2. 动态文字排版系统3. 装饰元素自动布局4. 高清输出适配朋友圈规格Attributes:config: 全局配置canvas_width: 画布宽度canvas_height: 画布高度def __init__(self):self.config CONFIG.output_configself.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_okTrue)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, formatself.config[format], dpi(self.dpi, self.dpi))print(f✅ 图片已保存: {full_path})return full_pathdef _create_canvas(self, color_scheme: List[str]) - Image.Image:创建渐变背景画布运用课程中的色彩心理学原理- 主色传达情感基调- 辅色增强层次感- 渐变营造空间深度canvas Image.new(modeRGB,size(self.canvas_width, self.canvas_height),colorcolor_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 canvasdef _draw_background_texture(self, canvas: Image.Image, style_name: str) - None:绘制背景纹理不同风格对应不同的纹理效果width, height canvas.sizetexture_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), width1)for j in range(0, height, 100):draw.line([(0, j), (width, j)], fill(255, 255, 255, alpha), width1)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(radius20))elif style_name cyber_future:# 网格和光点for i in range(0, width, 50):draw.line([(i, 0), (i, height)], fill(0, 255, 255, 30), width1)for j in range(0, height, 50):draw.line([(0, j), (width, j)], fill(0, 255, 255, 30),利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛

相关新闻

编写自动把小说转成分镜头脚本,颠覆编剧要专业训练的程序。

编写自动把小说转成分镜头脚本,颠覆编剧要专业训练的程序。

🎬 小说分镜师 - AI分镜头脚本自动生成系统 📖 README.md # NovelToStoryboard - 小说分镜师 ## 基于数字文化艺术创新创业课程的智能编剧辅助系统 ## 🎯 项目简介 NovelToStoryboard 是一款革命性的AI工具,能够将任意小说文本自…

2026/7/5 5:37:03 阅读更多 →
全球AI大模型的结构性危机与重构路径:从智能到智慧的范式转移

全球AI大模型的结构性危机与重构路径:从智能到智慧的范式转移

AI的结构性危机:从“卖菜阿姨”到文明级智慧的重构路径摘要全球AI大模型陷入深层结构性危机:智能维度登峰造极,智慧维度近乎空白。本文通过对GG3M项目评估事件的深度剖析,揭示三重病理根源——西方中心论的数据殖民导致认知框架霸…

2026/7/6 7:30:09 阅读更多 →
导师严选!自考必备的AI论文工具 —— 千笔ai写作

导师严选!自考必备的AI论文工具 —— 千笔ai写作

你是否曾在论文写作中感到力不从心?选题无从下手,框架反复调整,查重率居高不下,格式总出错……这些难题是否让你倍感焦虑?面对海量文献和复杂要求,许多自考学生都曾陷入“写不出来”的困境。而如今&#xf…

2026/5/17 5:46:38 阅读更多 →

最新新闻

【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序

【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序

上一篇介绍了整体构架,这一篇介绍如何实现心跳程序。在ubuntu上使用.net程序有不少方法,我们采用使用标准框架的方式。一、工程配置1、类型:控制台应用——莫担心,它会得到一个dll,部署这个dll即可2、目标框架&#xf…

2026/7/7 5:29:34 阅读更多 →
【Java课程设计/毕业设计】基于 SpringBoot+Vue 的校园体育赛事数据可视化系统的设计与实现 基于 SpringBoot 的大学生运动会数字化管理平台【附源码、数据库、万字文档】

【Java课程设计/毕业设计】基于 SpringBoot+Vue 的校园体育赛事数据可视化系统的设计与实现 基于 SpringBoot 的大学生运动会数字化管理平台【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/7 5:25:32 阅读更多 →
《深入理解计算机系统》计算机系统漫游

《深入理解计算机系统》计算机系统漫游

《深入理解计算机系统》(简称 CSAPP)书中 “计算机系统漫游” 部分的核心内容。这部分通常作为全书的引言或第一章,旨在宏观地描绘计算机系统的构成和运作方式。 信息的表示与处理(核心基础) 计算机系统处理的所有信息…

2026/7/7 5:23:32 阅读更多 →
远程协助软件推荐 远程协助软件哪个好

远程协助软件推荐 远程协助软件哪个好

日常帮亲友排查设备故障、异地处理工作难题,都需要靠谱的远程协助,便捷高效的远程协助能大幅降低跨设备、跨地域的操作成本。哪款远程协助软件体验比较呢?无界趣连2.0凭借轻量化设计与扎实的使用体验,成为个人日常远程协助的优选工…

2026/7/7 4:55:49 阅读更多 →
AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

一、准备工作- 确保 板框(Board Shape) 已画好(机械层 Mechanical 1)。​- 布局、走线基本完成,DRC 先过一遍。​- 切换到要敷铜的层:底部层标签点 Top Layer(顶层) 或 Bottom Layer…

2026/7/7 4:55:49 阅读更多 →
NET 10:Oxigraph 的 FFI 桥接实践

NET 10:Oxigraph 的 FFI 桥接实践

架构概览┌──────────────────────────────────────────────────────────┐ │ .NET 应用层 │ │ ┌──────────┐ ┌────────────────…

2026/7/7 4:55:49 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻