Files
arcrun-collector/cmd/arcrun-app/assets/store/gen-store-assets.py
T
Leo cef157c584 chore(collector): 下架死碼 arcrun-tray——但先把還活著的兩塊搬出來(D95 第一輪①)
`collector/cmd/arcrun-tray/`(fyne 版舊桌面殼)自 t193 換 Wails 後退役,
t215 已明文記錄是死碼:三支打包腳本全部只裝 `arcrun-app`。

🔴 **但它不是「整個都死」——複驗發現兩塊還在被現役腳本用:**

  ① `assets/store/*.png`(12 顆 Store 圖示)
     ← `arcrun-app/build-msix.sh:75` 每次打 msix 都 `cp` 它們。
       整個 `git rm` 掉 ⇒ 下一次打 msix 直接斷。
  ② `build-msix.sh --setup`(在 Mac 上建 makemsix 的一次性流程)
     ← `arcrun-app/build-msix.sh:34` 的錯誤訊息就是叫人去跑它。
       刪掉 ⇒ 新機器再也照不出 makemsix,而錯誤訊息會指向不存在的檔案。

⇒ 先把這兩塊逐字搬進 `arcrun-app/`(不重寫),再刪整個目錄。
  死碼下架最容易犯的錯就是「連還活著的那一塊一起丟掉」。

⚠️ **`.git` 不會因此變小**:772 MB 裡的 524 MB 是那三顆二進位
(`ArcrunRAG-mac-unsigned.zip` 16 MB/`arcrun-collector` 15 MB/
`dist-mac/ArcrunRAG-v0.15.7.dmg`)**留在歷史裡**,`git rm` 只停止追蹤。
真正瘦身要重寫歷史(filter-repo)=第三輪,需 leo 親自拍板。

順手更新:`.gitignore` 的三條 tray 路徑(換成 arcrun-app 的 dist-msix)、
`landing/worker.js` 與 `docs/store-submission.md` 裡指向舊素材位置的路徑。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 12:53:38 +08:00

109 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""重新產生 Microsoft Storemsix)的圖示素材。
素材真身=leo 的 CIS`InkStoneCo/arcrun-cis/`),本腳本只做「等比縮 + 置中合成」。
守 CIS 的 Don't:**不拉扁、不歪斜、不加第二個顏色**。
- 方形磚 → 用方形 icon`arcrun-icon-ink-1024.png`)等比縮。
- 寬磚 310×150 → 用**橫式 lockup**`arcrun-lockup-h-paper-on-ink.png`)置中於墨底。
不能拿方形 icon 硬拉成 310×150——舊版 `sips -z 150 310` 就是這樣把方形字符拉扁的。
- targetsize-16/24(工作列小圖)→ CIS 規定 26px 以下降級成 chevron
完整字符在這尺寸只剩約 4px 高,會糊掉。
用法(需要 Pillow):
python3 gen-store-assets.py
產物寫回本目錄、隨 repo 版控;`build-msix.sh` 只負責 cp 進包裡。
"""
import os
from pathlib import Path
from PIL import Image, ImageDraw
HERE = Path(__file__).resolve().parent
# CIS 住在 InkStoneCo 頂層。預設往上找,找不到時用 ARCRUN_CIS 指過去。
CIS = Path(os.environ["ARCRUN_CIS"]) if os.environ.get("ARCRUN_CIS") else None
if CIS is None:
for parent in HERE.parents:
cand = parent / "arcrun-cis"
if cand.is_dir():
CIS = cand
break
INK = (23, 24, 26, 255)
PAPER = (253, 252, 251, 255)
def load(name: str) -> Image.Image:
if CIS is None or not (CIS / name).exists():
raise SystemExit(
f"❌ 找不到 CIS 素材 {name}(找過 {CIS}\n"
f" 指過去:ARCRUN_CIS=/path/to/arcrun-cis python3 {Path(__file__).name}")
return Image.open(CIS / name).convert("RGBA")
def chevron_on_ink(size: int, inset: float = 0.20) -> Image.Image:
"""雙 chevronpaper)置中於墨底——給 26px 以下的小尺寸用。
幾何與 CIS `chevron-double.svg` 同一組座標(24-grid、stroke 2.8)。
先超取樣畫再縮,邊緣才不會鋸齒。
"""
ss = size * 16
unit = ss / 24.0
layer = Image.new("RGBA", (ss, ss), (0, 0, 0, 0))
d = ImageDraw.Draw(layer)
w = max(1, round(2.8 * unit))
for dx in (0, 7):
d.line([((5 + dx) * unit, 5 * unit),
((12 + dx) * unit, 12 * unit),
((5 + dx) * unit, 19 * unit)],
fill=PAPER, width=w, joint="curve")
art = layer.crop(layer.split()[3].getbbox())
target = ss * (1 - 2 * inset)
scale = target / max(art.size)
nw, nh = max(1, round(art.size[0] * scale)), max(1, round(art.size[1] * scale))
art = art.resize((nw, nh), Image.LANCZOS)
out = Image.new("RGBA", (ss, ss), INK)
out.paste(art, ((ss - nw) // 2, (ss - nh) // 2), art)
return out.resize((size, size), Image.LANCZOS)
def wide_tile(w: int, h: int, pad_ratio: float = 0.14) -> Image.Image:
"""寬磚:橫式 lockup 等比 fit 進墨底,四周留白(CIS clear space)。"""
lock = load("arcrun-lockup-h-paper-on-ink.png")
canvas = Image.new("RGBA", (w, h), INK)
lw, lh = lock.size
scale = min(w * (1 - 2 * pad_ratio) / lw, h * (1 - 2 * pad_ratio) / lh)
nw, nh = max(1, round(lw * scale)), max(1, round(lh * scale))
art = lock.resize((nw, nh), Image.LANCZOS)
canvas.paste(art, ((w - nw) // 2, (h - nh) // 2), art)
return canvas
def main() -> None:
square = load("arcrun-icon-ink-1024.png")
made = []
for name, s in [("Square44x44Logo", 44), ("StoreLogo", 50),
("Square71x71Logo", 71), ("Square150x150Logo", 150),
("Square310x310Logo", 310)]:
square.resize((s, s), Image.LANCZOS).save(HERE / f"{name}.png")
made.append((f"{name}.png", s, s))
# 工作列 / 開始功能表多尺寸:26px 以下用 chevronCIS 規定),其餘用方形 icon
for s in (16, 24, 32, 48, 256):
img = chevron_on_ink(s) if s <= 26 else square.resize((s, s), Image.LANCZOS)
img.save(HERE / f"Square44x44Logo.targetsize-{s}.png")
made.append((f"Square44x44Logo.targetsize-{s}.png", s, s))
wide_tile(310, 150).save(HERE / "Wide310x150Logo.png")
made.append(("Wide310x150Logo.png", 310, 150))
for n, w, h in made:
print(f"✅ {n}: {w}x{h}")
if __name__ == "__main__":
main()