103 lines
7.4 KiB
Python
103 lines
7.4 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
# 读取学生完成的项目JSON数据
|
|||
|
|
with open('网页未导入数据/学生完成的项目.json', 'r', encoding='utf-8') as f:
|
|||
|
|
projects_data = json.load(f)
|
|||
|
|
|
|||
|
|
# 提取视觉设计产业的数据
|
|||
|
|
visual_design_projects = []
|
|||
|
|
for item in projects_data:
|
|||
|
|
if item.get('所属就业管家') == '视觉设计':
|
|||
|
|
visual_design_projects.append(item)
|
|||
|
|
|
|||
|
|
print(f"找到 {len(visual_design_projects)} 个视觉设计项目数据")
|
|||
|
|
|
|||
|
|
# 生成我的项目库数据
|
|||
|
|
my_projects_data = []
|
|||
|
|
for item in visual_design_projects:
|
|||
|
|
unit_name = item.get('单元名称查询', '')
|
|||
|
|
project_names = item.get('学生完成的项目名称', [])
|
|||
|
|
|
|||
|
|
if unit_name and project_names:
|
|||
|
|
my_projects_data.append({
|
|||
|
|
"unitName": unit_name,
|
|||
|
|
"projects": project_names
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
# 生成可点击的特殊项目数据(使用文件夹中的项目)
|
|||
|
|
clickable_project_content = {
|
|||
|
|
"title": "《城市角落的治愈时刻——\"深夜书店的流浪猫\"》公众号文章AI插画设计项目",
|
|||
|
|
"description": "在信息过载的公众号生态中,通过AI插画设计为深夜书店与流浪猫的故事增添视觉温暖。",
|
|||
|
|
"images": [
|
|||
|
|
{
|
|||
|
|
"url": "/Users/apple/Documents/cursor/教务系统/frontend_视觉设计/网页未导入数据/视觉设计产业/学生完成的项目/《城市角落的治愈时刻》内文插画一.jpeg",
|
|||
|
|
"title": "《城市角落的治愈时刻》内文插画一"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"url": "/Users/apple/Documents/cursor/教务系统/frontend_视觉设计/网页未导入数据/视觉设计产业/学生完成的项目/《城市角落的治愈时刻》内文插画二.jpeg",
|
|||
|
|
"title": "《城市角落的治愈时刻》内文插画二"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"sections": [
|
|||
|
|
{
|
|||
|
|
"title": "一、项目背景",
|
|||
|
|
"content": "在信息过载的公众号生态中,\\\"有温度的视觉 + 有故事的文字\\\" 是突破传播壁垒的关键。本次公众号文章聚焦《城市角落的治愈时刻——\\\"深夜书店的流浪猫\\\"》这一具体场景,以 \\\"读者给流浪猫留暖手宝\\\" 的微小互动为核心,讲述城市深夜里人与动物之间的温柔羁绊。\\n\\n深夜的书店褪去白日喧嚣,一盏暖灯、一只蜷缩的流浪猫、一份悄悄留下的暖手宝,成为治愈都市人疲惫的 \\\"小确幸\\\"。为让这份 \\\"安静的温暖\\\" 更直观可感,避免纯文字难以传递的场景氛围与细腻情绪,特进行本次插画设计,通过可视化语言将文章核心故事转化为读者能 \\\"触摸\\\" 到的治愈画面,助力公众号内容形成情感共鸣与传播记忆点。"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"title": "二、项目核心目标",
|
|||
|
|
"content": "1. **精准还原故事场景**:以 "深夜书店 + 流浪猫 + 暖手宝" 为核心元素,严格贴合文章对场景的描述,确保插画与文字内容高度匹配,帮助读者快速代入 "深夜书店偶遇温暖" 的情境。\\n\\n2. **强化 "静默治愈" 情绪**:通过画面构图、色彩调性与细节设计,传递 "安静、柔软、安心" 的治愈感,用 "读者悄悄留暖手宝" 的含蓄互动、书店暖光与深夜冷色的对比,让观者感受到 "不打扰的善意"。\\n\\n3. **适配公众号传播场景**:设计封面与内文插画,封面需突出 "深夜书店 + 流浪猫" 的核心辨识度,吸引读者点击;内文插画则聚焦 "留暖手宝" 的互动细节,缓解文字阅读疲劳。\\n\\n4. **沉淀主题视觉资产**:形成一套围绕 "深夜书店治愈时刻" 的专属插画素材,既可用于本次文章发布,也能为公众号后续同类主题复用,强化公众号品牌调性。"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"title": "三、应用AI软件——Whisk",
|
|||
|
|
"content": "Whisk 是谷歌推出的一款别具一格的 AI 绘画产品,与传统同类工具存在显著差异。它的核心亮点在于对用户提示词技巧的要求极低。传统生图工具大多高度依赖精细的文字描述来引导 AI 生成图像,而 Whisk 允许用户上传图片,以此作为主题、场景和风格样式的参考依据。\\n\\n在具体运作时,Whisk 会借助 Gemini 模型自动解析用户上传的图片,生成详细的文字描述,随后将这些描述输送给 Imagen 3 模型,进而实现图像融合生成。"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"title": "四、设计说明",
|
|||
|
|
"content": "### 主题与场景适配\\n\\n- **场景细节锚定**:还原文章描述的关键元素,如木质书架、散落的书籍、前台的台灯、贴满便签的留言墙、玻璃门上 "24 小时营业" 的灯箱\\n- **核心互动**:明确画面核心动作——读者的手正轻轻将暖手宝放在流浪猫身旁\\n- **环境氛围**:突出 "深夜" 属性,营造 "闹中取静" 的氛围\\n\\n### 插画形式规范\\n\\n- **风格定位**:选择 "肌理水彩风" 或 "轻绘本风"\\n- **尺寸规格**:封面插画1080px×1350px,内文插画1080px×600px\\n- **文字点缀**:仅保留核心标题和简短点题文字\\n\\n### 色彩与光影设计\\n\\n- **主色调**:书店内暖黄+浅棕,书店外暗蓝+深灰\\n- **光影设计**:台灯暖光与月光冷色对比\\n- **核心色彩**:暖手宝浅粉配米白,与猫咪毛色和谐搭配"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"title": "五、成果展示",
|
|||
|
|
"content": "本次项目成功交付了两幅高质量AI插画:\\n\\n1. **内文插画一**:展现读者轻轻放置暖手宝的温柔瞬间,通过细腻的笔触和温暖的色调,完美诠释了人与动物间不打扰的善意。\\n\\n2. **内文插画二**:描绘读者离开后,流浪猫享受暖手宝温暖的安逸时光,体现了善意的延续和治愈的力量。\\n\\n两幅插画均采用轻绘本风格,色彩柔和,构图温馨,完美契合了"城市角落治愈时刻"的主题定位,为公众号文章增添了强有力的视觉感染力。"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 读取当前的项目库页面文件
|
|||
|
|
with open('src/pages/ProjectLibraryPage/index.jsx', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 生成新的myProjectsData数组
|
|||
|
|
my_projects_js = json.dumps(my_projects_data, ensure_ascii=False, indent=2)
|
|||
|
|
|
|||
|
|
# 生成新的clickableProjects数组
|
|||
|
|
clickable_projects_js = f'''[
|
|||
|
|
{{
|
|||
|
|
id: "clickable-1",
|
|||
|
|
name: "《城市角落的治愈时刻——"深夜书店的流浪猫"》公众号文章AI插画设计项目",
|
|||
|
|
unitName: "商业插画与原画",
|
|||
|
|
isClickable: true,
|
|||
|
|
content: {json.dumps(clickable_project_content, ensure_ascii=False, indent=8)}
|
|||
|
|
}}
|
|||
|
|
]'''
|
|||
|
|
|
|||
|
|
# 替换myProjectsData
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
# 替换myProjectsData
|
|||
|
|
old_my_projects_pattern = r'const myProjectsData = \[[\s\S]*?\];'
|
|||
|
|
new_my_projects = f'const myProjectsData = {my_projects_js};'
|
|||
|
|
content = re.sub(old_my_projects_pattern, new_my_projects, content)
|
|||
|
|
|
|||
|
|
# 替换clickableProjects
|
|||
|
|
old_clickable_pattern = r'const clickableProjects = \[[\s\S]*?\}[\s\S]*?\];'
|
|||
|
|
new_clickable = f'const clickableProjects = {clickable_projects_js};'
|
|||
|
|
content = re.sub(old_clickable_pattern, new_clickable, content)
|
|||
|
|
|
|||
|
|
# 写回文件
|
|||
|
|
with open('src/pages/ProjectLibraryPage/index.jsx', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
|
|||
|
|
print("个人项目库数据已更新完成!")
|
|||
|
|
print(f"不可查看项目数量:{len(my_projects_data)}个单元")
|
|||
|
|
print("可查看项目:《城市角落的治愈时刻》AI插画设计项目")
|