feat(博客): 添加多篇博客封面图片
为博客系统添加了多篇技术文章的封面图片,涵盖Git、Python工具、AI大模型、机器学习等主题。这些封面采用统一的SVG格式设计,包含标题、分类标签和视觉元素,用于提升博客文章的可视化展示效果。
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#1F172A" />
|
||||||
|
<stop offset="0.5" stop-color="#312E81" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#C4B5FD" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#93C5FD" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#C4B5FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">学术与效率</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">告别Word!AI时代让你的</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">LaTeX论文写作效率翻倍</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">论文写作 / 排版工具 / 学术效率</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">论文</text>
|
||||||
|
<rect x="248" y="376" width="164" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">LaTeX</text>
|
||||||
|
<rect x="430" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="464" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">效率</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(768 106)">
|
||||||
|
<rect x="0" y="0" width="272" height="372" rx="24" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<rect x="34" y="48" width="204" height="18" rx="9" fill="#C4B5FD" />
|
||||||
|
<rect x="34" y="92" width="184" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="122" width="208" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="152" width="168" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<path d="M338 84C384 30 468 32 512 88C558 146 540 236 472 280C396 330 302 302 270 236" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<text x="320" y="168" fill="#E0E7FF" font-family="Cambria Math, Times New Roman, serif" font-size="58">∫</text>
|
||||||
|
<text x="386" y="158" fill="#DBEAFE" font-family="Cambria Math, Times New Roman, serif" font-size="42">LaTeX</text>
|
||||||
|
<text x="352" y="228" fill="#CCFBF1" font-family="Cambria Math, Times New Roman, serif" font-size="40">Σ x² + y²</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,47 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="196" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700">AI时代的Vibe Co</text>
|
||||||
|
<text x="112" y="244" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700">ding:程序员不会被取</text>
|
||||||
|
<text x="112" y="292" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700">代,但需要进化</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">AI 编程 / Agentic CLI / 智能协作</text>
|
||||||
|
<rect x="112" y="376" width="164" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Agent</text>
|
||||||
|
<rect x="294" y="376" width="120" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="328" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">CLI</text>
|
||||||
|
<rect x="432" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="466" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,45 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">CLI在AI时代的浴火重生</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">AI 编程 / Agentic CLI / 智能协作</text>
|
||||||
|
<rect x="112" y="376" width="164" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Agent</text>
|
||||||
|
<rect x="294" y="376" width="120" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="328" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">CLI</text>
|
||||||
|
<rect x="432" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="466" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,46 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">DeepSeek</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">-V4全面解析</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">模型解析 / 趋势洞察 / 架构思考</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">模型</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">解析</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">趋势</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0F172A" />
|
||||||
|
<stop offset="0.5" stop-color="#1E293B" />
|
||||||
|
<stop offset="1" stop-color="#334155" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#93C5FD" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C4B5FD" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F9A8D4" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#93C5FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">内容策划</text>
|
||||||
|
<text x="112" y="196" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700">《DeepSeek V4</text>
|
||||||
|
<text x="112" y="244" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700"> 全面解析:开源模型的又</text>
|
||||||
|
<text x="112" y="292" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="36" font-weight="700">一次突破》</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">模型解析 / 趋势洞察 / 架构思考</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">模型</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">解析</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">趋势</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="0" width="448" height="296" rx="30" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M34 250C108 164 182 124 268 122C332 120 390 140 432 178" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 202C108 140 194 110 286 118C350 124 404 148 442 184" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 154C100 116 168 96 244 96C322 96 394 118 448 160" stroke="#F9A8D4" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<circle cx="110" cy="84" r="22" fill="#93C5FD" />
|
||||||
|
<circle cx="220" cy="62" r="18" fill="#C4B5FD" />
|
||||||
|
<circle cx="342" cy="72" r="16" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">Git内部原理详解</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">版本控制 / 团队协作 / 工作流</text>
|
||||||
|
<rect x="112" y="376" width="120" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Git</text>
|
||||||
|
<rect x="250" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="284" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">协作</text>
|
||||||
|
<rect x="386" y="376" width="120" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="420" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">工作流</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">Git团队协作指</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">南:从入门到精通</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">版本控制 / 团队协作 / 工作流</text>
|
||||||
|
<rect x="112" y="376" width="120" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Git</text>
|
||||||
|
<rect x="250" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="284" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">协作</text>
|
||||||
|
<rect x="386" y="376" width="120" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="420" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">工作流</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,36 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0F172A" />
|
||||||
|
<stop offset="0.5" stop-color="#1E293B" />
|
||||||
|
<stop offset="1" stop-color="#334155" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#93C5FD" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C4B5FD" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F9A8D4" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#93C5FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">内容策划</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">Git团队协作指南大纲</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">版本控制 / 团队协作 / 工作流</text>
|
||||||
|
<rect x="112" y="376" width="120" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Git</text>
|
||||||
|
<rect x="250" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="284" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">协作</text>
|
||||||
|
<rect x="386" y="376" width="120" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="420" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">工作流</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="0" width="448" height="296" rx="30" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M34 250C108 164 182 124 268 122C332 120 390 140 432 178" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 202C108 140 194 110 286 118C350 124 404 148 442 184" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 154C100 116 168 96 244 96C322 96 394 118 448 160" stroke="#F9A8D4" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<circle cx="110" cy="84" r="22" fill="#93C5FD" />
|
||||||
|
<circle cx="220" cy="62" r="18" fill="#C4B5FD" />
|
||||||
|
<circle cx="342" cy="72" r="16" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">Git团队协作指南(精简版)</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">版本控制 / 团队协作 / 工作流</text>
|
||||||
|
<rect x="112" y="376" width="120" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Git</text>
|
||||||
|
<rect x="250" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="284" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">协作</text>
|
||||||
|
<rect x="386" y="376" width="120" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="420" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">工作流</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,47 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#172554" />
|
||||||
|
<stop offset="1" stop-color="#4C1D95" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C084FC" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F472B6" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">机器学习</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">Linear Regr</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">ession 线性回归</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">监督学习 / 回归模型 / 入门理解</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">回归</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">基础</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">算法</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C084FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<rect x="0" y="72" width="116" height="232" rx="24" fill="rgba(103,232,249,0.14)" stroke="#67E8F9" />
|
||||||
|
<rect x="154" y="24" width="116" height="328" rx="24" fill="rgba(192,132,252,0.14)" stroke="#C084FC" />
|
||||||
|
<rect x="308" y="96" width="116" height="184" rx="24" fill="rgba(244,114,182,0.14)" stroke="#F472B6" />
|
||||||
|
<circle cx="58" cy="130" r="12" fill="#E0F2FE" />
|
||||||
|
<circle cx="58" cy="188" r="12" fill="#BAE6FD" />
|
||||||
|
<circle cx="58" cy="246" r="12" fill="#C4B5FD" />
|
||||||
|
<circle cx="212" cy="116" r="12" fill="#E9D5FF" />
|
||||||
|
<circle cx="212" cy="178" r="12" fill="#DDD6FE" />
|
||||||
|
<circle cx="212" cy="240" r="12" fill="#F5D0FE" />
|
||||||
|
<circle cx="212" cy="302" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="146" r="12" fill="#FCE7F3" />
|
||||||
|
<circle cx="366" cy="198" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="250" r="12" fill="#F9A8D4" />
|
||||||
|
<path d="M70 130L200 116L354 146" stroke="#67E8F9" stroke-width="4" />
|
||||||
|
<path d="M70 188L200 178L354 198" stroke="#C084FC" stroke-width="4" />
|
||||||
|
<path d="M70 246L200 240L354 250" stroke="#F472B6" stroke-width="4" />
|
||||||
|
<path d="M0 382C84 322 178 302 278 314C336 320 390 340 444 382" stroke="#67E8F9" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">OpenClaw 开</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">源智能体框架全面介绍</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">AI 编程助手 / 安装配置 / 使用实践</text>
|
||||||
|
<rect x="112" y="376" width="164" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI 工具</text>
|
||||||
|
<rect x="294" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="328" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">安装</text>
|
||||||
|
<rect x="430" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="464" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">指南</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">OpenClaw Wi</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">ndows 安装教程</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">AI 编程助手 / 安装配置 / 使用实践</text>
|
||||||
|
<rect x="112" y="376" width="164" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI 工具</text>
|
||||||
|
<rect x="294" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="328" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">安装</text>
|
||||||
|
<rect x="430" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="464" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">指南</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">SEO分析报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,53 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="160" y1="60" x2="1120" y2="660" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="panel" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop stop-color="#111827" stop-opacity="0.92" />
|
||||||
|
<stop offset="1" stop-color="#0F172A" stop-opacity="0.72" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="code" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop stop-color="#22D3EE" />
|
||||||
|
<stop offset="1" stop-color="#A855F7" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter id="blurGlow" x="-20%" y="-20%" width="140%" height="140%">
|
||||||
|
<feGaussianBlur stdDeviation="24" result="blur" />
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="blur" />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1060" cy="120" r="180" fill="#22D3EE" fill-opacity="0.12" />
|
||||||
|
<circle cx="1180" cy="560" r="210" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="260" cy="620" r="240" fill="#14B8A6" fill-opacity="0.10" />
|
||||||
|
|
||||||
|
<rect x="72" y="76" width="640" height="568" rx="30" fill="url(#panel)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<rect x="112" y="136" width="560" height="300" rx="24" fill="#07111F" stroke="rgba(34,211,238,0.24)" />
|
||||||
|
<circle cx="152" cy="172" r="8" fill="#FB7185" />
|
||||||
|
<circle cx="182" cy="172" r="8" fill="#FBBF24" />
|
||||||
|
<circle cx="212" cy="172" r="8" fill="#34D399" />
|
||||||
|
|
||||||
|
<path d="M184 240H330" stroke="url(#code)" stroke-width="10" stroke-linecap="round" filter="url(#blurGlow)" />
|
||||||
|
<path d="M184 280H436" stroke="#38BDF8" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M184 320H374" stroke="#C084FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M184 360H502" stroke="#22D3EE" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M184 400H290" stroke="#F472B6" stroke-width="10" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<path d="M826 176C938 124 1068 148 1140 222C1198 282 1194 374 1148 428C1100 484 1012 524 928 504C872 492 826 454 798 398C766 334 770 236 826 176Z" fill="rgba(15,23,42,0.56)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="946" cy="318" r="84" fill="rgba(34,211,238,0.16)" stroke="#67E8F9" stroke-width="2" />
|
||||||
|
<circle cx="946" cy="318" r="38" fill="rgba(168,85,247,0.18)" stroke="#C084FC" stroke-width="2" />
|
||||||
|
<path d="M866 404C900 366 980 344 1044 350C1094 356 1132 380 1158 424" stroke="url(#code)" stroke-width="7" stroke-linecap="round" filter="url(#blurGlow)" />
|
||||||
|
<path d="M792 472C842 430 922 418 996 430" stroke="#22D3EE" stroke-width="4" stroke-linecap="round" />
|
||||||
|
<path d="M896 202L840 154" stroke="#A855F7" stroke-width="5" stroke-linecap="round" />
|
||||||
|
<path d="M1036 238L1112 208" stroke="#22D3EE" stroke-width="5" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<text x="116" y="506" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 编程 / Agentic CLI / Vibe Coding</text>
|
||||||
|
<text x="116" y="564" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="46" font-weight="700">深入解析 Claude Code</text>
|
||||||
|
<text x="116" y="620" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">Vibe Coding 时代的 AI 编程利器</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,65 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="cube" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop stop-color="#60A5FA" />
|
||||||
|
<stop offset="1" stop-color="#22D3EE" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="orange" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop stop-color="#FDBA74" />
|
||||||
|
<stop offset="1" stop-color="#F97316" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
|
||||||
|
<feGaussianBlur stdDeviation="18" result="blur" />
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="blur" />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1098" cy="112" r="170" fill="#22D3EE" fill-opacity="0.14" />
|
||||||
|
<circle cx="948" cy="580" r="220" fill="#F97316" fill-opacity="0.12" />
|
||||||
|
<circle cx="254" cy="612" r="240" fill="#38BDF8" fill-opacity="0.10" />
|
||||||
|
|
||||||
|
<g transform="translate(780 118)">
|
||||||
|
<path d="M152 0L304 88V264L152 352L0 264V88L152 0Z" fill="rgba(8,47,73,0.50)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M152 30L276 102L152 174L28 102L152 30Z" fill="url(#cube)" />
|
||||||
|
<path d="M28 102L152 174V310L28 238V102Z" fill="#0284C7" />
|
||||||
|
<path d="M276 102L152 174V310L276 238V102Z" fill="#0369A1" />
|
||||||
|
<path d="M152 174V310" stroke="#E0F2FE" stroke-opacity="0.45" stroke-width="4" />
|
||||||
|
<path d="M86 214H218" stroke="#7DD3FC" stroke-width="6" stroke-linecap="round" />
|
||||||
|
<path d="M108 252H196" stroke="#38BDF8" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g transform="translate(698 324)">
|
||||||
|
<path d="M88 0L176 50V150L88 200L0 150V50L88 0Z" fill="url(#cube)" fill-opacity="0.88" />
|
||||||
|
<path d="M298 0L386 50V150L298 200L210 150V50L298 0Z" fill="url(#orange)" fill-opacity="0.90" />
|
||||||
|
<path d="M508 0L596 50V150L508 200L420 150V50L508 0Z" fill="url(#cube)" fill-opacity="0.84" />
|
||||||
|
<path d="M176 100H210" stroke="#E0F2FE" stroke-width="6" stroke-linecap="round" filter="url(#glow)" />
|
||||||
|
<path d="M386 100H420" stroke="#FED7AA" stroke-width="6" stroke-linecap="round" filter="url(#glow)" />
|
||||||
|
<path d="M88 200V250L298 370L508 250V200" stroke="#BAE6FD" stroke-width="4" stroke-dasharray="10 10" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="72" y="84" width="564" height="548" rx="32" fill="rgba(7,18,36,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">Container / Compose / Deploy</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">Docker 部署完全指南</text>
|
||||||
|
<text x="112" y="308" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">从入门到实战</text>
|
||||||
|
|
||||||
|
<rect x="112" y="366" width="148" height="56" rx="28" fill="rgba(34,211,238,0.12)" stroke="rgba(125,211,252,0.32)" />
|
||||||
|
<rect x="278" y="366" width="134" height="56" rx="28" fill="rgba(249,115,22,0.12)" stroke="rgba(253,186,116,0.30)" />
|
||||||
|
<rect x="430" y="366" width="132" height="56" rx="28" fill="rgba(96,165,250,0.12)" stroke="rgba(147,197,253,0.28)" />
|
||||||
|
|
||||||
|
<text x="146" y="402" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">环境准备</text>
|
||||||
|
<text x="311" y="402" fill="#FED7AA" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Compose</text>
|
||||||
|
<text x="466" y="402" fill="#DBEAFE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">实战部署</text>
|
||||||
|
|
||||||
|
<path d="M112 486H558" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 532H494" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 570H430" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,38 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#071A33" />
|
||||||
|
<stop offset="0.5" stop-color="#0F3D74" />
|
||||||
|
<stop offset="1" stop-color="#0B7285" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#7DD3FC" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#FDBA74" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#60A5FA" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#7DD3FC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">编程与工具</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">极速 Python 包管</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">理神器:uv 体验报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">Python 工具链 / 依赖管理 / 开发效率</text>
|
||||||
|
<rect x="112" y="376" width="186" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Python</text>
|
||||||
|
<rect x="316" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="350" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">uv</text>
|
||||||
|
<rect x="452" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="486" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">效率</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#7DD3FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#FDBA74" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="#7DD3FC" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="#FDBA74" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="#7DD3FC" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="#60A5FA" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0F172A" />
|
||||||
|
<stop offset="0.5" stop-color="#1E293B" />
|
||||||
|
<stop offset="1" stop-color="#334155" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#93C5FD" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C4B5FD" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F9A8D4" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#93C5FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">内容策划</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">《极速 Python 包管</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">理神器:uv 体验报告》</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">Python 工具链 / 依赖管理 / 开发效率</text>
|
||||||
|
<rect x="112" y="376" width="186" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Python</text>
|
||||||
|
<rect x="316" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="350" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">uv</text>
|
||||||
|
<rect x="452" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="486" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">效率</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="0" width="448" height="296" rx="30" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M34 250C108 164 182 124 268 122C332 120 390 140 432 178" stroke="#93C5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 202C108 140 194 110 286 118C350 124 404 148 442 184" stroke="#C4B5FD" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 154C100 116 168 96 244 96C322 96 394 118 448 160" stroke="#F9A8D4" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<circle cx="110" cy="84" r="22" fill="#93C5FD" />
|
||||||
|
<circle cx="220" cy="62" r="18" fill="#C4B5FD" />
|
||||||
|
<circle cx="342" cy="72" r="16" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
@@ -0,0 +1,78 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="100" y1="70" x2="1180" y2="650" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.45" stop-color="#172554" />
|
||||||
|
<stop offset="1" stop-color="#4C1D95" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="lens" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop stop-color="#38BDF8" />
|
||||||
|
<stop offset="1" stop-color="#A855F7" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="flow" x1="0" y1="0" x2="1" y2="0">
|
||||||
|
<stop stop-color="#22D3EE" />
|
||||||
|
<stop offset="0.5" stop-color="#A78BFA" />
|
||||||
|
<stop offset="1" stop-color="#F472B6" />
|
||||||
|
</linearGradient>
|
||||||
|
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
|
||||||
|
<feGaussianBlur stdDeviation="20" result="blur" />
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="blur" />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1114" cy="122" r="180" fill="#22D3EE" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="592" r="226" fill="#A855F7" fill-opacity="0.16" />
|
||||||
|
<circle cx="258" cy="592" r="218" fill="#38BDF8" fill-opacity="0.08" />
|
||||||
|
|
||||||
|
<g transform="translate(730 120)">
|
||||||
|
<circle cx="210" cy="200" r="170" fill="rgba(9,14,32,0.44)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<circle cx="210" cy="200" r="124" fill="rgba(56,189,248,0.12)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="210" cy="200" r="76" fill="rgba(168,85,247,0.20)" stroke="#C4B5FD" stroke-width="3" />
|
||||||
|
<circle cx="210" cy="200" r="22" fill="#E9D5FF" />
|
||||||
|
|
||||||
|
<g filter="url(#glow)">
|
||||||
|
<path d="M14 118C86 150 122 172 214 198" stroke="url(#flow)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M4 194C74 202 110 204 210 200" stroke="url(#flow)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M12 274C82 246 118 228 214 204" stroke="url(#flow)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g fill="#E0F2FE">
|
||||||
|
<rect x="0" y="88" width="56" height="56" rx="16" />
|
||||||
|
<rect x="0" y="166" width="56" height="56" rx="16" />
|
||||||
|
<rect x="0" y="244" width="56" height="56" rx="16" />
|
||||||
|
</g>
|
||||||
|
<text x="14" y="124" fill="#1E293B" font-family="Consolas, monospace" font-size="22">IMG</text>
|
||||||
|
<text x="14" y="202" fill="#1E293B" font-family="Consolas, monospace" font-size="22">VLM</text>
|
||||||
|
<text x="14" y="280" fill="#1E293B" font-family="Consolas, monospace" font-size="22">TXT</text>
|
||||||
|
|
||||||
|
<g fill="#C4B5FD">
|
||||||
|
<circle cx="392" cy="92" r="14" />
|
||||||
|
<circle cx="468" cy="146" r="14" />
|
||||||
|
<circle cx="498" cy="226" r="14" />
|
||||||
|
<circle cx="456" cy="306" r="14" />
|
||||||
|
<circle cx="378" cy="350" r="14" />
|
||||||
|
</g>
|
||||||
|
<path d="M350 102L436 146L474 222L444 294L386 338" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<rect x="72" y="84" width="584" height="552" rx="32" fill="rgba(7,12,28,0.68)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">Multimodal AI / Vision / Language</text>
|
||||||
|
<text x="112" y="248" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="46" font-weight="700">视觉语言模型技术综述</text>
|
||||||
|
<text x="112" y="308" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">图像理解与大语言模型的融合之路</text>
|
||||||
|
|
||||||
|
<rect x="112" y="366" width="170" height="60" rx="30" fill="rgba(34,211,238,0.12)" stroke="rgba(103,232,249,0.32)" />
|
||||||
|
<rect x="300" y="366" width="164" height="60" rx="30" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<rect x="482" y="366" width="128" height="60" rx="30" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
|
||||||
|
<text x="148" y="404" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">视觉编码器</text>
|
||||||
|
<text x="338" y="404" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">跨模态对齐</text>
|
||||||
|
<text x="520" y="404" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">生成推理</text>
|
||||||
|
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C084FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,47 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#172554" />
|
||||||
|
<stop offset="1" stop-color="#4C1D95" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C084FC" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F472B6" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">机器学习</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">从全连接层到卷积:深</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">度学习中的空间智慧</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">神经网络 / 表征学习 / 结构演进</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">卷积</text>
|
||||||
|
<rect x="248" y="376" width="142" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">神经网络</text>
|
||||||
|
<rect x="408" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="442" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">视觉</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C084FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<rect x="0" y="72" width="116" height="232" rx="24" fill="rgba(103,232,249,0.14)" stroke="#67E8F9" />
|
||||||
|
<rect x="154" y="24" width="116" height="328" rx="24" fill="rgba(192,132,252,0.14)" stroke="#C084FC" />
|
||||||
|
<rect x="308" y="96" width="116" height="184" rx="24" fill="rgba(244,114,182,0.14)" stroke="#F472B6" />
|
||||||
|
<circle cx="58" cy="130" r="12" fill="#E0F2FE" />
|
||||||
|
<circle cx="58" cy="188" r="12" fill="#BAE6FD" />
|
||||||
|
<circle cx="58" cy="246" r="12" fill="#C4B5FD" />
|
||||||
|
<circle cx="212" cy="116" r="12" fill="#E9D5FF" />
|
||||||
|
<circle cx="212" cy="178" r="12" fill="#DDD6FE" />
|
||||||
|
<circle cx="212" cy="240" r="12" fill="#F5D0FE" />
|
||||||
|
<circle cx="212" cy="302" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="146" r="12" fill="#FCE7F3" />
|
||||||
|
<circle cx="366" cy="198" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="250" r="12" fill="#F9A8D4" />
|
||||||
|
<path d="M70 130L200 116L354 146" stroke="#67E8F9" stroke-width="4" />
|
||||||
|
<path d="M70 188L200 178L354 198" stroke="#C084FC" stroke-width="4" />
|
||||||
|
<path d="M70 246L200 240L354 250" stroke="#F472B6" stroke-width="4" />
|
||||||
|
<path d="M0 382C84 322 178 302 278 314C336 320 390 340 444 382" stroke="#67E8F9" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">博客爬取报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">大数据技术栈</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,45 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">博客爬取报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,46 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">大语言模型算子详解:</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">学术版 + 白话版</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">模型能力 / Agent / 智能协作</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">模型</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">智能</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,46 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#1E1B4B" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#A855F7" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#22D3EE" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">AI 与大模型</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">学习 Agent,越学</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">越像在重新理解操作系统</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">AI 编程 / Agentic CLI / 智能协作</text>
|
||||||
|
<rect x="112" y="376" width="164" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">Agent</text>
|
||||||
|
<rect x="294" y="376" width="120" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="328" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">CLI</text>
|
||||||
|
<rect x="432" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="466" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">AI</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#A855F7" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="#67E8F9" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="#A855F7" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="#67E8F9" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="#A855F7" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="#22D3EE" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="#A855F7" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">博客文章摘要检查报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,40 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">Serendipi</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">ty 博客文章列表</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,39 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#111827" />
|
||||||
|
<stop offset="0.5" stop-color="#1F2937" />
|
||||||
|
<stop offset="1" stop-color="#0F766E" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#34D399" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#2DD4BF" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#A7F3D0" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#34D399" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">数据分析与报告</text>
|
||||||
|
<text x="112" y="250" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="48" font-weight="700">博客文章标签和分类审查报告</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">数据整理 / 指标审查 / 结果报告</text>
|
||||||
|
<rect x="112" y="376" width="118" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">数据</text>
|
||||||
|
<rect x="248" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="282" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">报告</text>
|
||||||
|
<rect x="384" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="418" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">审查</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="#34D399" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="#2DD4BF" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="#A7F3D0" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="#A7F3D0" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="#34D399" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="#2DD4BF" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,47 @@
|
|||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#0B1020" />
|
||||||
|
<stop offset="0.5" stop-color="#172554" />
|
||||||
|
<stop offset="1" stop-color="#4C1D95" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="#67E8F9" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="#C084FC" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="#F472B6" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="rgba(7,12,28,0.70)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="#67E8F9" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">机器学习</text>
|
||||||
|
<text x="112" y="224" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">深度学习完全指南:从</text>
|
||||||
|
<text x="112" y="280" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="44" font-weight="700">理论基础到实践入门</text>
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">模型体系 / 核心概念 / 系统学习</text>
|
||||||
|
<rect x="112" y="376" width="142" height="56" rx="28" fill="rgba(103,232,249,0.12)" stroke="rgba(103,232,249,0.30)" />
|
||||||
|
<text x="146" y="412" fill="#BAE6FD" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">深度学习</text>
|
||||||
|
<rect x="272" y="376" width="118" height="56" rx="28" fill="rgba(168,85,247,0.12)" stroke="rgba(196,181,253,0.30)" />
|
||||||
|
<text x="306" y="412" fill="#DDD6FE" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">模型</text>
|
||||||
|
<rect x="408" y="376" width="118" height="56" rx="28" fill="rgba(244,114,182,0.12)" stroke="rgba(251,207,232,0.26)" />
|
||||||
|
<text x="442" y="412" fill="#FBCFE8" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">指南</text>
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="#67E8F9" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="#C084FC" stroke-width="8" stroke-linecap="round" />
|
||||||
|
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<rect x="0" y="72" width="116" height="232" rx="24" fill="rgba(103,232,249,0.14)" stroke="#67E8F9" />
|
||||||
|
<rect x="154" y="24" width="116" height="328" rx="24" fill="rgba(192,132,252,0.14)" stroke="#C084FC" />
|
||||||
|
<rect x="308" y="96" width="116" height="184" rx="24" fill="rgba(244,114,182,0.14)" stroke="#F472B6" />
|
||||||
|
<circle cx="58" cy="130" r="12" fill="#E0F2FE" />
|
||||||
|
<circle cx="58" cy="188" r="12" fill="#BAE6FD" />
|
||||||
|
<circle cx="58" cy="246" r="12" fill="#C4B5FD" />
|
||||||
|
<circle cx="212" cy="116" r="12" fill="#E9D5FF" />
|
||||||
|
<circle cx="212" cy="178" r="12" fill="#DDD6FE" />
|
||||||
|
<circle cx="212" cy="240" r="12" fill="#F5D0FE" />
|
||||||
|
<circle cx="212" cy="302" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="146" r="12" fill="#FCE7F3" />
|
||||||
|
<circle cx="366" cy="198" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="250" r="12" fill="#F9A8D4" />
|
||||||
|
<path d="M70 130L200 116L354 146" stroke="#67E8F9" stroke-width="4" />
|
||||||
|
<path d="M70 188L200 178L354 198" stroke="#C084FC" stroke-width="4" />
|
||||||
|
<path d="M70 246L200 240L354 250" stroke="#F472B6" stroke-width="4" />
|
||||||
|
<path d="M0 382C84 322 178 302 278 314C336 320 390 340 444 382" stroke="#67E8F9" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,377 @@
|
|||||||
|
const fs = require("node:fs");
|
||||||
|
const path = require("node:path");
|
||||||
|
|
||||||
|
const blogRoot = "d:\\Code\\Obsidian\\博客";
|
||||||
|
const coverDir = path.join(blogRoot, "covers");
|
||||||
|
|
||||||
|
fs.mkdirSync(coverDir, { recursive: true });
|
||||||
|
|
||||||
|
const existingCoverMap = new Map([
|
||||||
|
[
|
||||||
|
path.join(blogRoot, "AI与大模型", "深入解析 Claude Code:Vibe Coding 时代的 AI 编程利器.md"),
|
||||||
|
"claude-code-vibe-coding-cover.svg",
|
||||||
|
],
|
||||||
|
[path.join(blogRoot, "编程与工具", "Docker部署完全指南.md"), "docker-deployment-guide-cover.svg"],
|
||||||
|
[path.join(blogRoot, "机器学习", "视觉语言模型技术综述.md"), "vision-language-model-cover.svg"],
|
||||||
|
]);
|
||||||
|
|
||||||
|
function escapeXml(text) {
|
||||||
|
return String(text ?? "")
|
||||||
|
.replaceAll("&", "&")
|
||||||
|
.replaceAll("<", "<")
|
||||||
|
.replaceAll(">", ">")
|
||||||
|
.replaceAll('"', """);
|
||||||
|
}
|
||||||
|
|
||||||
|
function walkMarkdownFiles(dir) {
|
||||||
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||||
|
const files = [];
|
||||||
|
for (const entry of entries) {
|
||||||
|
const fullPath = path.join(dir, entry.name);
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
if (entry.name === "covers") continue;
|
||||||
|
files.push(...walkMarkdownFiles(fullPath));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (entry.isFile() && entry.name.endsWith(".md")) {
|
||||||
|
files.push(fullPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return files.sort((a, b) => a.localeCompare(b, "zh-CN"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getArticleTitle(filePath) {
|
||||||
|
const raw = fs.readFileSync(filePath, "utf8");
|
||||||
|
const titleMatch = raw.match(/^title:\s*(.+)$/m);
|
||||||
|
if (titleMatch) {
|
||||||
|
return titleMatch[1].trim().replace(/^['"]|['"]$/g, "");
|
||||||
|
}
|
||||||
|
const h1Match = raw.match(/^#\s+(.+)$/m);
|
||||||
|
if (h1Match) {
|
||||||
|
return h1Match[1].trim();
|
||||||
|
}
|
||||||
|
return path.basename(filePath, ".md");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCategory(filePath) {
|
||||||
|
return path.basename(path.dirname(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSafeCoverName(filePath) {
|
||||||
|
if (existingCoverMap.has(filePath)) {
|
||||||
|
return existingCoverMap.get(filePath);
|
||||||
|
}
|
||||||
|
const baseName = path.basename(filePath, ".md");
|
||||||
|
const safeName = baseName.replace(/[<>:"/\\|?*]/g, "-").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
||||||
|
return `${safeName}-cover.svg`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function splitTitle(title) {
|
||||||
|
const clean = title.trim();
|
||||||
|
if (clean.length <= 14) return [clean];
|
||||||
|
if (clean.length <= 28) return [clean.slice(0, Math.ceil(clean.length / 2)), clean.slice(Math.ceil(clean.length / 2))];
|
||||||
|
const first = clean.slice(0, 12);
|
||||||
|
const second = clean.slice(12, 24);
|
||||||
|
const third = clean.slice(24);
|
||||||
|
return [first, second, third].filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTheme(category, title) {
|
||||||
|
const theme = {
|
||||||
|
key: "default",
|
||||||
|
label: "博客封面",
|
||||||
|
subtitle: "知识沉淀 / 主题文章",
|
||||||
|
bg1: "#0B1020",
|
||||||
|
bg2: "#172554",
|
||||||
|
bg3: "#0F766E",
|
||||||
|
accent1: "#67E8F9",
|
||||||
|
accent2: "#A78BFA",
|
||||||
|
accent3: "#F472B6",
|
||||||
|
panel: "rgba(7,12,28,0.70)",
|
||||||
|
tags: ["博客", "封面", "文章"],
|
||||||
|
};
|
||||||
|
|
||||||
|
const categoryThemes = {
|
||||||
|
"AI与大模型": {
|
||||||
|
key: "ai",
|
||||||
|
label: "AI 与大模型",
|
||||||
|
subtitle: "模型能力 / Agent / 智能协作",
|
||||||
|
bg1: "#0B1020",
|
||||||
|
bg2: "#1E1B4B",
|
||||||
|
bg3: "#0F766E",
|
||||||
|
accent1: "#67E8F9",
|
||||||
|
accent2: "#A855F7",
|
||||||
|
accent3: "#22D3EE",
|
||||||
|
tags: ["AI", "模型", "智能"],
|
||||||
|
},
|
||||||
|
"机器学习": {
|
||||||
|
key: "ml",
|
||||||
|
label: "机器学习",
|
||||||
|
subtitle: "算法原理 / 神经网络 / 模型理解",
|
||||||
|
bg1: "#0B1020",
|
||||||
|
bg2: "#172554",
|
||||||
|
bg3: "#4C1D95",
|
||||||
|
accent1: "#67E8F9",
|
||||||
|
accent2: "#C084FC",
|
||||||
|
accent3: "#F472B6",
|
||||||
|
tags: ["学习", "网络", "模型"],
|
||||||
|
},
|
||||||
|
"编程与工具": {
|
||||||
|
key: "tools",
|
||||||
|
label: "编程与工具",
|
||||||
|
subtitle: "工程实践 / 工具链 / 效率提升",
|
||||||
|
bg1: "#071A33",
|
||||||
|
bg2: "#0F3D74",
|
||||||
|
bg3: "#0B7285",
|
||||||
|
accent1: "#7DD3FC",
|
||||||
|
accent2: "#FDBA74",
|
||||||
|
accent3: "#60A5FA",
|
||||||
|
tags: ["工具", "工程", "实践"],
|
||||||
|
},
|
||||||
|
"数据分析与报告": {
|
||||||
|
key: "report",
|
||||||
|
label: "数据分析与报告",
|
||||||
|
subtitle: "指标洞察 / 数据审查 / 结果汇总",
|
||||||
|
bg1: "#111827",
|
||||||
|
bg2: "#1F2937",
|
||||||
|
bg3: "#0F766E",
|
||||||
|
accent1: "#34D399",
|
||||||
|
accent2: "#2DD4BF",
|
||||||
|
accent3: "#A7F3D0",
|
||||||
|
tags: ["数据", "分析", "报告"],
|
||||||
|
},
|
||||||
|
"学术与效率": {
|
||||||
|
key: "academic",
|
||||||
|
label: "学术与效率",
|
||||||
|
subtitle: "论文写作 / 知识表达 / 工具方法",
|
||||||
|
bg1: "#1F172A",
|
||||||
|
bg2: "#312E81",
|
||||||
|
bg3: "#0F766E",
|
||||||
|
accent1: "#C4B5FD",
|
||||||
|
accent2: "#93C5FD",
|
||||||
|
accent3: "#A7F3D0",
|
||||||
|
tags: ["学术", "写作", "效率"],
|
||||||
|
},
|
||||||
|
其他: {
|
||||||
|
key: "outline",
|
||||||
|
label: "内容策划",
|
||||||
|
subtitle: "选题梳理 / 结构设计 / 创作准备",
|
||||||
|
bg1: "#0F172A",
|
||||||
|
bg2: "#1E293B",
|
||||||
|
bg3: "#334155",
|
||||||
|
accent1: "#93C5FD",
|
||||||
|
accent2: "#C4B5FD",
|
||||||
|
accent3: "#F9A8D4",
|
||||||
|
tags: ["策划", "结构", "草稿"],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
Object.assign(theme, categoryThemes[category] || {});
|
||||||
|
|
||||||
|
const keywordRules = [
|
||||||
|
[/Claude|Vibe|CLI|Agent/i, { subtitle: "AI 编程 / Agentic CLI / 智能协作", tags: ["Agent", "CLI", "AI"] }],
|
||||||
|
[/DeepSeek|大模型/, { subtitle: "模型解析 / 趋势洞察 / 架构思考", tags: ["模型", "解析", "趋势"] }],
|
||||||
|
[/Docker|部署/, { subtitle: "容器部署 / 服务编排 / 工程实战", tags: ["部署", "容器", "实战"] }],
|
||||||
|
[/Git/, { subtitle: "版本控制 / 团队协作 / 工作流", tags: ["Git", "协作", "工作流"] }],
|
||||||
|
[/OpenClaw/, { subtitle: "AI 编程助手 / 安装配置 / 使用实践", tags: ["AI 工具", "安装", "指南"] }],
|
||||||
|
[/\buv\b|uv工具/, { subtitle: "Python 工具链 / 依赖管理 / 开发效率", tags: ["Python", "uv", "效率"] }],
|
||||||
|
[/SEO|爬取|摘要|标签|文章列表|技术栈/, { subtitle: "数据整理 / 指标审查 / 结果报告", tags: ["数据", "报告", "审查"] }],
|
||||||
|
[/LaTeX|论文/, { subtitle: "论文写作 / 排版工具 / 学术效率", tags: ["论文", "LaTeX", "效率"] }],
|
||||||
|
[/LinearRegression|线性回归/, { subtitle: "监督学习 / 回归模型 / 入门理解", tags: ["回归", "基础", "算法"] }],
|
||||||
|
[/卷积|全连接层/, { subtitle: "神经网络 / 表征学习 / 结构演进", tags: ["卷积", "神经网络", "视觉"] }],
|
||||||
|
[/深度学习/, { subtitle: "模型体系 / 核心概念 / 系统学习", tags: ["深度学习", "模型", "指南"] }],
|
||||||
|
[/视觉语言模型/, { subtitle: "多模态 AI / 视觉理解 / 语言推理", tags: ["VLM", "多模态", "推理"] }],
|
||||||
|
[/大纲/, { subtitle: "内容策划 / 结构拆解 / 写作准备", tags: ["大纲", "结构", "规划"] }],
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const [regex, patch] of keywordRules) {
|
||||||
|
if (regex.test(title)) {
|
||||||
|
Object.assign(theme, patch);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGraphicMarkup(theme) {
|
||||||
|
const { key, accent1, accent2, accent3 } = theme;
|
||||||
|
if (key === "ai") {
|
||||||
|
return `
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="${accent1}" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="${accent2}" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="${accent1}" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="${accent2}" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="${accent3}" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="${accent2}" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
if (key === "ml") {
|
||||||
|
return `
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<rect x="0" y="72" width="116" height="232" rx="24" fill="rgba(103,232,249,0.14)" stroke="${accent1}" />
|
||||||
|
<rect x="154" y="24" width="116" height="328" rx="24" fill="rgba(192,132,252,0.14)" stroke="${accent2}" />
|
||||||
|
<rect x="308" y="96" width="116" height="184" rx="24" fill="rgba(244,114,182,0.14)" stroke="${accent3}" />
|
||||||
|
<circle cx="58" cy="130" r="12" fill="#E0F2FE" />
|
||||||
|
<circle cx="58" cy="188" r="12" fill="#BAE6FD" />
|
||||||
|
<circle cx="58" cy="246" r="12" fill="#C4B5FD" />
|
||||||
|
<circle cx="212" cy="116" r="12" fill="#E9D5FF" />
|
||||||
|
<circle cx="212" cy="178" r="12" fill="#DDD6FE" />
|
||||||
|
<circle cx="212" cy="240" r="12" fill="#F5D0FE" />
|
||||||
|
<circle cx="212" cy="302" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="146" r="12" fill="#FCE7F3" />
|
||||||
|
<circle cx="366" cy="198" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="250" r="12" fill="#F9A8D4" />
|
||||||
|
<path d="M70 130L200 116L354 146" stroke="${accent1}" stroke-width="4" />
|
||||||
|
<path d="M70 188L200 178L354 198" stroke="${accent2}" stroke-width="4" />
|
||||||
|
<path d="M70 246L200 240L354 250" stroke="${accent3}" stroke-width="4" />
|
||||||
|
<path d="M0 382C84 322 178 302 278 314C336 320 390 340 444 382" stroke="${accent1}" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
if (key === "tools") {
|
||||||
|
return `
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="${accent1}" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="${accent2}" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="${accent1}" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="${accent3}" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
if (key === "report") {
|
||||||
|
return `
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="${accent1}" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="${accent2}" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="${accent3}" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="${accent3}" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="${accent1}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="${accent2}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
if (key === "academic") {
|
||||||
|
return `
|
||||||
|
<g transform="translate(768 106)">
|
||||||
|
<rect x="0" y="0" width="272" height="372" rx="24" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<rect x="34" y="48" width="204" height="18" rx="9" fill="${accent1}" />
|
||||||
|
<rect x="34" y="92" width="184" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="122" width="208" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="152" width="168" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<path d="M338 84C384 30 468 32 512 88C558 146 540 236 472 280C396 330 302 302 270 236" stroke="${accent2}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<text x="320" y="168" fill="#E0E7FF" font-family="Cambria Math, Times New Roman, serif" font-size="58">∫</text>
|
||||||
|
<text x="386" y="158" fill="#DBEAFE" font-family="Cambria Math, Times New Roman, serif" font-size="42">LaTeX</text>
|
||||||
|
<text x="352" y="228" fill="#CCFBF1" font-family="Cambria Math, Times New Roman, serif" font-size="40">Σ x² + y²</text>
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
return `
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="0" width="448" height="296" rx="30" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M34 250C108 164 182 124 268 122C332 120 390 140 432 178" stroke="${accent1}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 202C108 140 194 110 286 118C350 124 404 148 442 184" stroke="${accent2}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 154C100 116 168 96 244 96C322 96 394 118 448 160" stroke="${accent3}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<circle cx="110" cy="84" r="22" fill="#93C5FD" />
|
||||||
|
<circle cx="220" cy="62" r="18" fill="#C4B5FD" />
|
||||||
|
<circle cx="342" cy="72" r="16" fill="#F9A8D4" />
|
||||||
|
</g>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildTitleMarkup(title) {
|
||||||
|
const lines = splitTitle(title);
|
||||||
|
const fontSize = lines.length === 1 ? 48 : lines.length === 2 ? 44 : 36;
|
||||||
|
const lineHeight = lines.length === 3 ? 48 : 56;
|
||||||
|
const startY = lines.length === 1 ? 250 : lines.length === 2 ? 224 : 196;
|
||||||
|
return lines
|
||||||
|
.map((line, index) => {
|
||||||
|
const y = startY + index * lineHeight;
|
||||||
|
return ` <text x="112" y="${y}" fill="#F8FAFC" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="${fontSize}" font-weight="700">${escapeXml(line)}</text>`;
|
||||||
|
})
|
||||||
|
.join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildTagMarkup(tags) {
|
||||||
|
const fills = ["rgba(103,232,249,0.12)", "rgba(168,85,247,0.12)", "rgba(244,114,182,0.12)"];
|
||||||
|
const strokes = ["rgba(103,232,249,0.30)", "rgba(196,181,253,0.30)", "rgba(251,207,232,0.26)"];
|
||||||
|
const textColors = ["#BAE6FD", "#DDD6FE", "#FBCFE8"];
|
||||||
|
let x = 112;
|
||||||
|
return tags.slice(0, 3).map((tag, index) => {
|
||||||
|
const width = Math.max(118, 54 + tag.length * 22);
|
||||||
|
const rect = ` <rect x="${x}" y="376" width="${width}" height="56" rx="28" fill="${fills[index]}" stroke="${strokes[index]}" />`;
|
||||||
|
const text = ` <text x="${x + 34}" y="412" fill="${textColors[index]}" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="22">${escapeXml(tag)}</text>`;
|
||||||
|
x += width + 18;
|
||||||
|
return `${rect}\n${text}`;
|
||||||
|
}).join("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildSvg(title, theme) {
|
||||||
|
return `<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="${theme.bg1}" />
|
||||||
|
<stop offset="0.5" stop-color="${theme.bg2}" />
|
||||||
|
<stop offset="1" stop-color="${theme.bg3}" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="${theme.accent1}" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="${theme.accent2}" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="${theme.accent3}" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="${theme.panel}" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="${theme.accent1}" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">${escapeXml(theme.label)}</text>
|
||||||
|
${buildTitleMarkup(title)}
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">${escapeXml(theme.subtitle)}</text>
|
||||||
|
${buildTagMarkup(theme.tags)}
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="${theme.accent1}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="${theme.accent2}" stroke-width="8" stroke-linecap="round" />
|
||||||
|
${getGraphicMarkup(theme)}
|
||||||
|
</svg>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const articles = walkMarkdownFiles(blogRoot);
|
||||||
|
const created = [];
|
||||||
|
const skipped = [];
|
||||||
|
|
||||||
|
for (const articlePath of articles) {
|
||||||
|
if (existingCoverMap.has(articlePath)) {
|
||||||
|
skipped.push(`${articlePath} => ${existingCoverMap.get(articlePath)}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const title = getArticleTitle(articlePath);
|
||||||
|
const category = getCategory(articlePath);
|
||||||
|
const theme = getTheme(category, title);
|
||||||
|
const coverName = getSafeCoverName(articlePath);
|
||||||
|
const coverPath = path.join(coverDir, coverName);
|
||||||
|
|
||||||
|
if (fs.existsSync(coverPath)) {
|
||||||
|
skipped.push(`${articlePath} => ${coverName}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(coverPath, buildSvg(title, theme), "utf8");
|
||||||
|
created.push(coverPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Created: ${created.length}`);
|
||||||
|
for (const file of created) console.log(file);
|
||||||
|
console.log(`Skipped: ${skipped.length}`);
|
||||||
|
for (const file of skipped) console.log(file);
|
||||||
@@ -0,0 +1,494 @@
|
|||||||
|
# 批量为博客文章生成 SVG 封面图。
|
||||||
|
Set-StrictMode -Version Latest
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
|
$blogRoot = "d:\Code\Obsidian\博客"
|
||||||
|
$coverDir = Join-Path $blogRoot "covers"
|
||||||
|
|
||||||
|
New-Item -ItemType Directory -Force -Path $coverDir | Out-Null
|
||||||
|
|
||||||
|
# 已人工调整过的样例封面,后续批量任务中不覆盖。
|
||||||
|
$existingCoverMap = @{
|
||||||
|
"d:\Code\Obsidian\博客\AI与大模型\深入解析 Claude Code:Vibe Coding 时代的 AI 编程利器.md" = "claude-code-vibe-coding-cover.svg"
|
||||||
|
"d:\Code\Obsidian\博客\编程与工具\Docker部署完全指南.md" = "docker-deployment-guide-cover.svg"
|
||||||
|
"d:\Code\Obsidian\博客\机器学习\视觉语言模型技术综述.md" = "vision-language-model-cover.svg"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Escape-Xml {
|
||||||
|
param([string]$Text)
|
||||||
|
|
||||||
|
if ([string]::IsNullOrEmpty($Text)) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Text.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace('"', """)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ArticleTitle {
|
||||||
|
param([string]$Path)
|
||||||
|
|
||||||
|
$raw = Get-Content -LiteralPath $Path -Raw -Encoding UTF8
|
||||||
|
|
||||||
|
if ($raw -match "(?m)^title:\s*(.+)$") {
|
||||||
|
return $matches[1].Trim().Trim("'").Trim('"')
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($raw -match "(?m)^#\s+(.+)$") {
|
||||||
|
return $matches[1].Trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
return [System.IO.Path]::GetFileNameWithoutExtension($Path)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-CategoryName {
|
||||||
|
param([string]$Path)
|
||||||
|
|
||||||
|
return Split-Path (Split-Path $Path -Parent) -Leaf
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-SafeCoverName {
|
||||||
|
param([string]$ArticlePath)
|
||||||
|
|
||||||
|
if ($existingCoverMap.ContainsKey($ArticlePath)) {
|
||||||
|
return $existingCoverMap[$ArticlePath]
|
||||||
|
}
|
||||||
|
|
||||||
|
$baseName = [System.IO.Path]::GetFileNameWithoutExtension($ArticlePath)
|
||||||
|
$safeName = ($baseName -replace '[<>:"/\\|?*]', "-") -replace "\s+", "-"
|
||||||
|
$safeName = $safeName.Trim("-")
|
||||||
|
return "$safeName-cover.svg"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Split-TextLines {
|
||||||
|
param(
|
||||||
|
[string]$Text,
|
||||||
|
[int]$MaxCharsPerLine
|
||||||
|
)
|
||||||
|
|
||||||
|
$clean = $Text.Trim()
|
||||||
|
if ([string]::IsNullOrWhiteSpace($clean)) {
|
||||||
|
return @("")
|
||||||
|
}
|
||||||
|
|
||||||
|
$lines = New-Object System.Collections.Generic.List[string]
|
||||||
|
$remaining = $clean
|
||||||
|
|
||||||
|
while ($remaining.Length -gt $MaxCharsPerLine) {
|
||||||
|
$cutIndex = $MaxCharsPerLine
|
||||||
|
$spaceIndex = $remaining.LastIndexOf(" ", [Math]::Min($MaxCharsPerLine, $remaining.Length - 1))
|
||||||
|
if ($spaceIndex -gt 6) {
|
||||||
|
$cutIndex = $spaceIndex
|
||||||
|
}
|
||||||
|
|
||||||
|
$lines.Add($remaining.Substring(0, $cutIndex).Trim())
|
||||||
|
$remaining = $remaining.Substring($cutIndex).Trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($remaining.Length -gt 0) {
|
||||||
|
$lines.Add($remaining)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($lines.Count -gt 3) {
|
||||||
|
$merged = @($lines[0], $lines[1], (($lines | Select-Object -Skip 2) -join " "))
|
||||||
|
return $merged
|
||||||
|
}
|
||||||
|
|
||||||
|
return $lines.ToArray()
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-ThemeInfo {
|
||||||
|
param(
|
||||||
|
[string]$Category,
|
||||||
|
[string]$Title
|
||||||
|
)
|
||||||
|
|
||||||
|
$theme = [ordered]@{
|
||||||
|
Key = "default"
|
||||||
|
Label = "博客封面"
|
||||||
|
Subtitle = "知识沉淀 / 主题文章"
|
||||||
|
Bg1 = "#0B1020"
|
||||||
|
Bg2 = "#172554"
|
||||||
|
Bg3 = "#0F766E"
|
||||||
|
Accent1 = "#67E8F9"
|
||||||
|
Accent2 = "#A78BFA"
|
||||||
|
Accent3 = "#F472B6"
|
||||||
|
Panel = "rgba(7,12,28,0.70)"
|
||||||
|
Tags = @("博客", "封面", "文章")
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($Category) {
|
||||||
|
"AI与大模型" {
|
||||||
|
$theme.Key = "ai"
|
||||||
|
$theme.Label = "AI 与大模型"
|
||||||
|
$theme.Subtitle = "模型能力 / Agent / 智能协作"
|
||||||
|
$theme.Bg1 = "#0B1020"
|
||||||
|
$theme.Bg2 = "#1E1B4B"
|
||||||
|
$theme.Bg3 = "#0F766E"
|
||||||
|
$theme.Accent1 = "#67E8F9"
|
||||||
|
$theme.Accent2 = "#A855F7"
|
||||||
|
$theme.Accent3 = "#22D3EE"
|
||||||
|
$theme.Tags = @("AI", "模型", "智能")
|
||||||
|
}
|
||||||
|
"机器学习" {
|
||||||
|
$theme.Key = "ml"
|
||||||
|
$theme.Label = "机器学习"
|
||||||
|
$theme.Subtitle = "算法原理 / 神经网络 / 模型理解"
|
||||||
|
$theme.Bg1 = "#0B1020"
|
||||||
|
$theme.Bg2 = "#172554"
|
||||||
|
$theme.Bg3 = "#4C1D95"
|
||||||
|
$theme.Accent1 = "#67E8F9"
|
||||||
|
$theme.Accent2 = "#C084FC"
|
||||||
|
$theme.Accent3 = "#F472B6"
|
||||||
|
$theme.Tags = @("学习", "网络", "模型")
|
||||||
|
}
|
||||||
|
"编程与工具" {
|
||||||
|
$theme.Key = "tools"
|
||||||
|
$theme.Label = "编程与工具"
|
||||||
|
$theme.Subtitle = "工程实践 / 工具链 / 效率提升"
|
||||||
|
$theme.Bg1 = "#071A33"
|
||||||
|
$theme.Bg2 = "#0F3D74"
|
||||||
|
$theme.Bg3 = "#0B7285"
|
||||||
|
$theme.Accent1 = "#7DD3FC"
|
||||||
|
$theme.Accent2 = "#FDBA74"
|
||||||
|
$theme.Accent3 = "#60A5FA"
|
||||||
|
$theme.Tags = @("工具", "工程", "实践")
|
||||||
|
}
|
||||||
|
"数据分析与报告" {
|
||||||
|
$theme.Key = "report"
|
||||||
|
$theme.Label = "数据分析与报告"
|
||||||
|
$theme.Subtitle = "指标洞察 / 数据审查 / 结果汇总"
|
||||||
|
$theme.Bg1 = "#111827"
|
||||||
|
$theme.Bg2 = "#1F2937"
|
||||||
|
$theme.Bg3 = "#0F766E"
|
||||||
|
$theme.Accent1 = "#34D399"
|
||||||
|
$theme.Accent2 = "#2DD4BF"
|
||||||
|
$theme.Accent3 = "#A7F3D0"
|
||||||
|
$theme.Tags = @("数据", "分析", "报告")
|
||||||
|
}
|
||||||
|
"学术与效率" {
|
||||||
|
$theme.Key = "academic"
|
||||||
|
$theme.Label = "学术与效率"
|
||||||
|
$theme.Subtitle = "论文写作 / 知识表达 / 工具方法"
|
||||||
|
$theme.Bg1 = "#1F172A"
|
||||||
|
$theme.Bg2 = "#312E81"
|
||||||
|
$theme.Bg3 = "#0F766E"
|
||||||
|
$theme.Accent1 = "#C4B5FD"
|
||||||
|
$theme.Accent2 = "#93C5FD"
|
||||||
|
$theme.Accent3 = "#A7F3D0"
|
||||||
|
$theme.Tags = @("学术", "写作", "效率")
|
||||||
|
}
|
||||||
|
"其他" {
|
||||||
|
$theme.Key = "outline"
|
||||||
|
$theme.Label = "内容策划"
|
||||||
|
$theme.Subtitle = "选题梳理 / 结构设计 / 创作准备"
|
||||||
|
$theme.Bg1 = "#0F172A"
|
||||||
|
$theme.Bg2 = "#1E293B"
|
||||||
|
$theme.Bg3 = "#334155"
|
||||||
|
$theme.Accent1 = "#93C5FD"
|
||||||
|
$theme.Accent2 = "#C4B5FD"
|
||||||
|
$theme.Accent3 = "#F9A8D4"
|
||||||
|
$theme.Tags = @("策划", "结构", "草稿")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch -Regex ($Title) {
|
||||||
|
"Claude|Vibe|CLI|Agent" {
|
||||||
|
$theme.Subtitle = "AI 编程 / Agentic CLI / 智能协作"
|
||||||
|
$theme.Tags = @("Agent", "CLI", "AI")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"DeepSeek|大模型" {
|
||||||
|
$theme.Subtitle = "模型解析 / 趋势洞察 / 架构思考"
|
||||||
|
$theme.Tags = @("模型", "解析", "趋势")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"Docker|部署" {
|
||||||
|
$theme.Subtitle = "容器部署 / 服务编排 / 工程实战"
|
||||||
|
$theme.Tags = @("部署", "容器", "实战")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"Git" {
|
||||||
|
$theme.Subtitle = "版本控制 / 团队协作 / 工作流"
|
||||||
|
$theme.Tags = @("Git", "协作", "工作流")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"OpenClaw" {
|
||||||
|
$theme.Subtitle = "AI 编程助手 / 安装配置 / 使用实践"
|
||||||
|
$theme.Tags = @("AI 工具", "安装", "指南")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"uv" {
|
||||||
|
$theme.Subtitle = "Python 工具链 / 依赖管理 / 开发效率"
|
||||||
|
$theme.Tags = @("Python", "uv", "效率")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"SEO|爬取|摘要|标签|文章列表|技术栈" {
|
||||||
|
$theme.Subtitle = "数据整理 / 指标审查 / 结果报告"
|
||||||
|
$theme.Tags = @("数据", "报告", "审查")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"LaTeX|论文" {
|
||||||
|
$theme.Subtitle = "论文写作 / 排版工具 / 学术效率"
|
||||||
|
$theme.Tags = @("论文", "LaTeX", "效率")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"LinearRegression|线性回归" {
|
||||||
|
$theme.Subtitle = "监督学习 / 回归模型 / 入门理解"
|
||||||
|
$theme.Tags = @("回归", "基础", "算法")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"卷积|全连接层" {
|
||||||
|
$theme.Subtitle = "神经网络 / 表征学习 / 结构演进"
|
||||||
|
$theme.Tags = @("卷积", "神经网络", "视觉")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"深度学习" {
|
||||||
|
$theme.Subtitle = "模型体系 / 核心概念 / 系统学习"
|
||||||
|
$theme.Tags = @("深度学习", "模型", "指南")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"视觉语言模型" {
|
||||||
|
$theme.Subtitle = "多模态 AI / 视觉理解 / 语言推理"
|
||||||
|
$theme.Tags = @("VLM", "多模态", "推理")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
"大纲" {
|
||||||
|
$theme.Subtitle = "内容策划 / 结构拆解 / 写作准备"
|
||||||
|
$theme.Tags = @("大纲", "结构", "规划")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $theme
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-GraphicMarkup {
|
||||||
|
param($Theme)
|
||||||
|
|
||||||
|
switch ($Theme.Key) {
|
||||||
|
"ai" {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<circle cx="200" cy="182" r="168" fill="rgba(9,14,32,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<circle cx="200" cy="182" r="120" fill="rgba(103,232,249,0.10)" stroke="$($Theme.Accent1)" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="68" fill="rgba(168,85,247,0.18)" stroke="$($Theme.Accent2)" stroke-width="3" />
|
||||||
|
<circle cx="200" cy="182" r="18" fill="#E9D5FF" />
|
||||||
|
<path d="M28 124C92 148 134 166 198 182" stroke="$($Theme.Accent1)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M6 190C82 194 132 190 198 182" stroke="$($Theme.Accent2)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<path d="M18 260C94 232 134 214 198 182" stroke="$($Theme.Accent3)" stroke-width="7" stroke-linecap="round" />
|
||||||
|
<circle cx="24" cy="124" r="18" fill="#E0F2FE" />
|
||||||
|
<circle cx="10" cy="190" r="18" fill="#DDD6FE" />
|
||||||
|
<circle cx="24" cy="260" r="18" fill="#CCFBF1" />
|
||||||
|
<path d="M312 88L390 126L422 208L382 288L304 330" stroke="$($Theme.Accent2)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<circle cx="312" cy="88" r="14" fill="#C4B5FD" />
|
||||||
|
<circle cx="390" cy="126" r="14" fill="#93C5FD" />
|
||||||
|
<circle cx="422" cy="208" r="14" fill="#A7F3D0" />
|
||||||
|
<circle cx="382" cy="288" r="14" fill="#67E8F9" />
|
||||||
|
<circle cx="304" cy="330" r="14" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
"ml" {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(760 112)">
|
||||||
|
<rect x="0" y="72" width="116" height="232" rx="24" fill="rgba(103,232,249,0.14)" stroke="$($Theme.Accent1)" />
|
||||||
|
<rect x="154" y="24" width="116" height="328" rx="24" fill="rgba(192,132,252,0.14)" stroke="$($Theme.Accent2)" />
|
||||||
|
<rect x="308" y="96" width="116" height="184" rx="24" fill="rgba(244,114,182,0.14)" stroke="$($Theme.Accent3)" />
|
||||||
|
<circle cx="58" cy="130" r="12" fill="#E0F2FE" />
|
||||||
|
<circle cx="58" cy="188" r="12" fill="#BAE6FD" />
|
||||||
|
<circle cx="58" cy="246" r="12" fill="#C4B5FD" />
|
||||||
|
<circle cx="212" cy="116" r="12" fill="#E9D5FF" />
|
||||||
|
<circle cx="212" cy="178" r="12" fill="#DDD6FE" />
|
||||||
|
<circle cx="212" cy="240" r="12" fill="#F5D0FE" />
|
||||||
|
<circle cx="212" cy="302" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="146" r="12" fill="#FCE7F3" />
|
||||||
|
<circle cx="366" cy="198" r="12" fill="#FBCFE8" />
|
||||||
|
<circle cx="366" cy="250" r="12" fill="#F9A8D4" />
|
||||||
|
<path d="M70 130L200 116L354 146" stroke="$($Theme.Accent1)" stroke-width="4" />
|
||||||
|
<path d="M70 188L200 178L354 198" stroke="$($Theme.Accent2)" stroke-width="4" />
|
||||||
|
<path d="M70 246L200 240L354 250" stroke="$($Theme.Accent3)" stroke-width="4" />
|
||||||
|
<path d="M0 382C84 322 178 302 278 314C336 320 390 340 444 382" stroke="$($Theme.Accent1)" stroke-width="6" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
"tools" {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(760 108)">
|
||||||
|
<path d="M148 0L296 86V258L148 344L0 258V86L148 0Z" fill="rgba(8,47,73,0.42)" stroke="rgba(255,255,255,0.16)" />
|
||||||
|
<path d="M148 26L268 96L148 166L28 96L148 26Z" fill="$($Theme.Accent1)" />
|
||||||
|
<path d="M28 96L148 166V300L28 230V96Z" fill="#0284C7" />
|
||||||
|
<path d="M268 96L148 166V300L268 230V96Z" fill="#0369A1" />
|
||||||
|
<path d="M356 112H470" stroke="$($Theme.Accent2)" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 176H506" stroke="$($Theme.Accent1)" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<path d="M356 240H454" stroke="$($Theme.Accent3)" stroke-width="10" stroke-linecap="round" />
|
||||||
|
<rect x="352" y="54" width="176" height="246" rx="28" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
"report" {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="24" width="430" height="300" rx="28" fill="rgba(8,47,73,0.36)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M54 248V136" stroke="$($Theme.Accent1)" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M134 248V92" stroke="$($Theme.Accent2)" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M214 248V164" stroke="$($Theme.Accent3)" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M294 248V68" stroke="#6EE7B7" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M374 248V118" stroke="#99F6E4" stroke-width="28" stroke-linecap="round" />
|
||||||
|
<path d="M44 286H388" stroke="rgba(255,255,255,0.16)" stroke-width="4" />
|
||||||
|
<circle cx="370" cy="94" r="56" fill="rgba(167,243,208,0.10)" stroke="$($Theme.Accent3)" stroke-width="4" />
|
||||||
|
<path d="M370 94L398 66" stroke="$($Theme.Accent1)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M370 94L370 146" stroke="$($Theme.Accent2)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
"academic" {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(768 106)">
|
||||||
|
<rect x="0" y="0" width="272" height="372" rx="24" fill="rgba(255,255,255,0.08)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<rect x="34" y="48" width="204" height="18" rx="9" fill="$($Theme.Accent1)" />
|
||||||
|
<rect x="34" y="92" width="184" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="122" width="208" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<rect x="34" y="152" width="168" height="12" rx="6" fill="rgba(255,255,255,0.56)" />
|
||||||
|
<path d="M338 84C384 30 468 32 512 88C558 146 540 236 472 280C396 330 302 302 270 236" stroke="$($Theme.Accent2)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<text x="320" y="168" fill="#E0E7FF" font-family="Cambria Math, Times New Roman, serif" font-size="58">∫</text>
|
||||||
|
<text x="386" y="158" fill="#DBEAFE" font-family="Cambria Math, Times New Roman, serif" font-size="42">LaTeX</text>
|
||||||
|
<text x="352" y="228" fill="#CCFBF1" font-family="Cambria Math, Times New Roman, serif" font-size="40">Σ x² + y²</text>
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
return @"
|
||||||
|
<g transform="translate(760 116)">
|
||||||
|
<rect x="0" y="0" width="448" height="296" rx="30" fill="rgba(15,23,42,0.34)" stroke="rgba(255,255,255,0.14)" />
|
||||||
|
<path d="M34 250C108 164 182 124 268 122C332 120 390 140 432 178" stroke="$($Theme.Accent1)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 202C108 140 194 110 286 118C350 124 404 148 442 184" stroke="$($Theme.Accent2)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M34 154C100 116 168 96 244 96C322 96 394 118 448 160" stroke="$($Theme.Accent3)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<circle cx="110" cy="84" r="22" fill="#93C5FD" />
|
||||||
|
<circle cx="220" cy="62" r="18" fill="#C4B5FD" />
|
||||||
|
<circle cx="342" cy="72" r="16" fill="#F9A8D4" />
|
||||||
|
</g>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function New-TitleMarkup {
|
||||||
|
param([string]$Title)
|
||||||
|
|
||||||
|
$maxChars = if ($Title.Length -gt 28) { 14 } elseif ($Title.Length -gt 20) { 16 } else { 20 }
|
||||||
|
$lines = Split-TextLines -Text $Title -MaxCharsPerLine $maxChars
|
||||||
|
$fontSize = switch ($lines.Count) {
|
||||||
|
1 { 48 }
|
||||||
|
2 { if (($lines | Measure-Object -Maximum Length).Maximum -gt 18) { 42 } else { 46 } }
|
||||||
|
default { 36 }
|
||||||
|
}
|
||||||
|
|
||||||
|
$lineHeight = if ($lines.Count -ge 3) { 48 } else { 56 }
|
||||||
|
$startY = switch ($lines.Count) {
|
||||||
|
1 { 250 }
|
||||||
|
2 { 226 }
|
||||||
|
default { 198 }
|
||||||
|
}
|
||||||
|
|
||||||
|
$markup = New-Object System.Collections.Generic.List[string]
|
||||||
|
for ($i = 0; $i -lt $lines.Count; $i++) {
|
||||||
|
$y = $startY + ($i * $lineHeight)
|
||||||
|
$markup.Add(" <text x=""112"" y=""$y"" fill=""#F8FAFC"" font-family=""Microsoft YaHei, Segoe UI, sans-serif"" font-size=""$fontSize"" font-weight=""700"">$([string](Escape-Xml $lines[$i]))</text>")
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($markup -join "`n")
|
||||||
|
}
|
||||||
|
|
||||||
|
function New-TagMarkup {
|
||||||
|
param([string[]]$Tags)
|
||||||
|
|
||||||
|
$x = 112
|
||||||
|
$y = 376
|
||||||
|
$items = New-Object System.Collections.Generic.List[string]
|
||||||
|
$fills = @("rgba(103,232,249,0.12)", "rgba(168,85,247,0.12)", "rgba(244,114,182,0.12)")
|
||||||
|
$strokes = @("rgba(103,232,249,0.30)", "rgba(196,181,253,0.30)", "rgba(251,207,232,0.26)")
|
||||||
|
$texts = @("#BAE6FD", "#DDD6FE", "#FBCFE8")
|
||||||
|
|
||||||
|
for ($i = 0; $i -lt [Math]::Min(3, $Tags.Count); $i++) {
|
||||||
|
$tag = $Tags[$i]
|
||||||
|
$width = [Math]::Max(118, 54 + ($tag.Length * 22))
|
||||||
|
$items.Add(" <rect x=""$x"" y=""$y"" width=""$width"" height=""56"" rx=""28"" fill=""$($fills[$i])"" stroke=""$($strokes[$i])"" />")
|
||||||
|
$items.Add(" <text x=""$($x + 34)"" y=""$($y + 36)"" fill=""$($texts[$i])"" font-family=""Microsoft YaHei, Segoe UI, sans-serif"" font-size=""22"">$([string](Escape-Xml $tag))</text>")
|
||||||
|
$x += $width + 18
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($items -join "`n")
|
||||||
|
}
|
||||||
|
|
||||||
|
function New-CoverSvg {
|
||||||
|
param(
|
||||||
|
[string]$Title,
|
||||||
|
[hashtable]$Theme
|
||||||
|
)
|
||||||
|
|
||||||
|
$label = Escape-Xml $Theme.Label
|
||||||
|
$subtitle = Escape-Xml $Theme.Subtitle
|
||||||
|
$titleMarkup = New-TitleMarkup -Title $Title
|
||||||
|
$tagMarkup = New-TagMarkup -Tags $Theme.Tags
|
||||||
|
$graphicMarkup = Get-GraphicMarkup -Theme $Theme
|
||||||
|
|
||||||
|
return @"
|
||||||
|
<svg width="1280" height="720" viewBox="0 0 1280 720" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="bg" x1="120" y1="40" x2="1180" y2="680" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="$($Theme.Bg1)" />
|
||||||
|
<stop offset="0.5" stop-color="$($Theme.Bg2)" />
|
||||||
|
<stop offset="1" stop-color="$($Theme.Bg3)" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect width="1280" height="720" fill="url(#bg)" />
|
||||||
|
<circle cx="1090" cy="110" r="176" fill="$($Theme.Accent1)" fill-opacity="0.12" />
|
||||||
|
<circle cx="980" cy="590" r="220" fill="$($Theme.Accent2)" fill-opacity="0.14" />
|
||||||
|
<circle cx="258" cy="612" r="240" fill="$($Theme.Accent3)" fill-opacity="0.10" />
|
||||||
|
<rect x="72" y="84" width="586" height="552" rx="32" fill="$($Theme.Panel)" stroke="rgba(255,255,255,0.12)" />
|
||||||
|
<text x="112" y="176" fill="$($Theme.Accent1)" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="24" letter-spacing="4">$label</text>
|
||||||
|
$titleMarkup
|
||||||
|
<text x="112" y="324" fill="#E2E8F0" font-family="Microsoft YaHei, Segoe UI, sans-serif" font-size="26">$subtitle</text>
|
||||||
|
$tagMarkup
|
||||||
|
<path d="M112 494H564" stroke="rgba(255,255,255,0.14)" stroke-width="2" />
|
||||||
|
<path d="M112 536H526" stroke="$($Theme.Accent1)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
<path d="M112 576H458" stroke="$($Theme.Accent2)" stroke-width="8" stroke-linecap="round" />
|
||||||
|
$graphicMarkup
|
||||||
|
</svg>
|
||||||
|
"@
|
||||||
|
}
|
||||||
|
|
||||||
|
$articles = Get-ChildItem -LiteralPath $blogRoot -Recurse -File -Filter "*.md" |
|
||||||
|
Where-Object { $_.FullName -notlike "*\covers\*" } |
|
||||||
|
Sort-Object FullName
|
||||||
|
|
||||||
|
$created = New-Object System.Collections.Generic.List[string]
|
||||||
|
$skipped = New-Object System.Collections.Generic.List[string]
|
||||||
|
|
||||||
|
foreach ($article in $articles) {
|
||||||
|
$articlePath = $article.FullName
|
||||||
|
if ($existingCoverMap.ContainsKey($articlePath)) {
|
||||||
|
$skipped.Add("$articlePath => $($existingCoverMap[$articlePath])")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$title = Get-ArticleTitle -Path $articlePath
|
||||||
|
$category = Get-CategoryName -Path $articlePath
|
||||||
|
$theme = Get-ThemeInfo -Category $category -Title $title
|
||||||
|
$coverName = Get-SafeCoverName -ArticlePath $articlePath
|
||||||
|
$coverPath = Join-Path $coverDir $coverName
|
||||||
|
|
||||||
|
if (Test-Path -LiteralPath $coverPath) {
|
||||||
|
$skipped.Add("$articlePath => $(Split-Path $coverPath -Leaf)")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$svg = New-CoverSvg -Title $title -Theme $theme
|
||||||
|
Set-Content -LiteralPath $coverPath -Value $svg -Encoding UTF8
|
||||||
|
$created.Add($coverPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Created: $($created.Count)"
|
||||||
|
$created | ForEach-Object { Write-Output $_ }
|
||||||
|
Write-Output "Skipped: $($skipped.Count)"
|
||||||
|
$skipped | ForEach-Object { Write-Output $_ }
|
||||||