Files
SoonDesign/scripts/gen-empty-state-icon.ps1
T
24kycj 88c6ce8ccc 重构 monorepo 并完善网页端订阅与首页体验
- 迁移为 frontend-web、frontend-electron、backend-web 与 docker 部署结构
- 网页端:订阅门禁二次弹窗、套餐/支付组件化、顶栏分组对齐
- 首页:最近文件与模板库布局优化,缩略图对齐,下载与删除操作
- 新增管理后台、支付与云端文件 API,更新 README 与项目规范

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 18:17:39 +08:00

93 lines
3.6 KiB
PowerShell

# Dark-theme empty state PNG — true alpha, colors visible on #363d45 panels.
$ErrorActionPreference = 'Stop'
Add-Type -AssemblyName System.Drawing
$out = Join-Path $PSScriptRoot '..\frontend-web\assets\images\web\empty-state.png'
$size = 320
$pf = [System.Drawing.Imaging.PixelFormat]::Format32bppArgb
$bmp = New-Object System.Drawing.Bitmap($size, $size, $pf)
$g = [System.Drawing.Graphics]::FromImage($bmp)
$g.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias
$g.Clear([System.Drawing.Color]::FromArgb(0, 0, 0, 0))
function C($hex, $a = 255) {
$h = $hex.TrimStart('#')
return [System.Drawing.Color]::FromArgb($a, [Convert]::ToInt32($h.Substring(0,2),16), [Convert]::ToInt32($h.Substring(2,2),16), [Convert]::ToInt32($h.Substring(4,2),16))
}
# Lighter tones for visibility on dark UI (--soon-text / --soon-border range)
$cFace = C '#9aa3ad'
$cFaceD = C '#7a8794'
$cFaceDD = C '#6b7580'
$cStroke = C '#b8c0c8'
$cAccent = C '#009688'
$cAccentH= C '#26a69a'
$cShadow = C '#000000' 55
function Pt($x, $y) { New-Object System.Drawing.PointF $x, $y }
function FillPoly($pts, $fill, $stroke, $sw = 1.4) {
$path = New-Object System.Drawing.Drawing2D.GraphicsPath
$path.AddPolygon($pts)
$g.FillPath((New-Object System.Drawing.SolidBrush $fill), $path)
if ($stroke) {
$pen = New-Object System.Drawing.Pen $stroke, $sw
$pen.LineJoin = [System.Drawing.Drawing2D.LineJoin]::Round
$g.DrawPath($pen, $path)
$pen.Dispose()
}
$path.Dispose()
}
# Ground shadow
$sh = New-Object System.Drawing.Drawing2D.GraphicsPath
$sh.AddEllipse(68, 252, 184, 26)
$g.FillPath((New-Object System.Drawing.SolidBrush $cShadow), $sh)
$sh.Dispose()
# Isometric open inbox
FillPoly @((Pt 86 130),(Pt 160 88),(Pt 234 130),(Pt 160 172)) $cFaceD $cStroke
FillPoly @((Pt 86 130),(Pt 160 172),(Pt 160 232),(Pt 86 192)) $cFace $cStroke
FillPoly @((Pt 160 172),(Pt 234 130),(Pt 234 192),(Pt 160 232)) $cFaceDD $cStroke
FillPoly @((Pt 86 192),(Pt 160 232),(Pt 234 192),(Pt 160 152)) (C '#5c6770') $cStroke
# Open flaps (lighter)
FillPoly @((Pt 86 130),(Pt 52 148),(Pt 86 192),(Pt 120 176)) (C '#8a939c') $cStroke 1.1
FillPoly @((Pt 234 130),(Pt 268 148),(Pt 234 192),(Pt 200 176)) (C '#8a939c') $cStroke 1.1
FillPoly @((Pt 160 88),(Pt 124 70),(Pt 196 70)) (C '#8a939c') $cStroke 1.1
# Accent front edge
$lip = New-Object System.Drawing.Drawing2D.GraphicsPath
$lip.AddLines(@((Pt 86 192),(Pt 160 232),(Pt 234 192)))
$pa = New-Object System.Drawing.Pen $cAccent, 3
$pa.StartCap = [System.Drawing.Drawing2D.LineCap]::Round
$pa.EndCap = [System.Drawing.Drawing2D.LineCap]::Round
$g.DrawPath($pa, $lip)
$pa.Dispose(); $lip.Dispose()
# Inner dashed lines (empty hint)
$pd = New-Object System.Drawing.Pen (C '#b8c0c8' 100), 1.6
$pd.DashStyle = [System.Drawing.Drawing2D.DashStyle]::Dash
$g.DrawLine($pd, 114, 166, 206, 166)
$g.DrawLine($pd, 124, 182, 196, 182)
$pd.Dispose()
# Accent center mark
$g.FillEllipse((New-Object System.Drawing.SolidBrush $cAccentH), 152, 200, 16, 16)
$g.DrawEllipse((New-Object System.Drawing.Pen (C '#ffffff' 80), 1.2), 152, 200, 16, 16)
# Floating doc sheet
FillPoly @((Pt 208 104),(Pt 254 82),(Pt 258 114),(Pt 212 136)) (C '#7a8794') $cStroke 1.1
$pl = New-Object System.Drawing.Pen (C '#b8c0c8' 140), 1.2
$g.DrawLine($pl, 216, 108, 246, 92)
$g.DrawLine($pl, 216, 116, 240, 102)
$g.DrawLine($pl, 216, 124, 234, 112)
$pl.Dispose()
$g.Dispose()
$dir = Split-Path $out -Parent
if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir -Force | Out-Null }
$bmp.Save($out, [System.Drawing.Imaging.ImageFormat]::Png)
$bmp.Dispose()
Write-Host "OK $((Get-Item $out).FullName) $((Get-Item $out).Length) bytes"