diff --git a/scripts/generate-rounded-icon.py b/scripts/generate-rounded-icon.py index 02157d2..57e46e8 100644 --- a/scripts/generate-rounded-icon.py +++ b/scripts/generate-rounded-icon.py @@ -43,13 +43,12 @@ def create_rounded_rect_mask(size: int, radius: int) -> Image.Image: return mask -def compose_icon(size: int, source: Image.Image) -> Image.Image: - """原图作为整体,缩放至画布 CONTENT_RATIO,居中,裁成圆角矩形""" +def compose_icon(size: int, source: Image.Image, rounded: bool = True) -> Image.Image: + """原图作为整体,缩放至画布 CONTENT_RATIO,居中""" canvas = Image.new("RGBA", (size, size), (0, 0, 0, 0)) plate_size = int(size * CONTENT_RATIO) plate_offset = (size - plate_size) // 2 - radius = int(plate_size * CORNER_RATIO) # 原图等比缩放,短边充满 plate_size src_w, src_h = source.size @@ -63,12 +62,32 @@ def compose_icon(size: int, source: Image.Image) -> Image.Image: top = (new_h - plate_size) // 2 img = resized.crop((left, top, left + plate_size, top + plate_size)) - # 圆角蒙版裁剪 - mask = create_rounded_rect_mask(plate_size, radius) - canvas.paste(img, (plate_offset, plate_offset), mask) + if rounded: + # 圆角蒙版裁剪(macOS / Linux) + radius = int(plate_size * CORNER_RATIO) + mask = create_rounded_rect_mask(plate_size, radius) + canvas.paste(img, (plate_offset, plate_offset), mask) + else: + # 正方形填满(Windows 专用) + canvas.paste(img, (plate_offset, plate_offset)) return canvas +def compose_icon_windows(size: int, source: Image.Image) -> Image.Image: + """Windows 专用:原图填满整个画布 100%,无圆角,无透明边距""" + # 原图等比缩放,短边充满画布 + src_w, src_h = source.size + ratio = max(size / src_w, size / src_h) + new_w = int(src_w * ratio) + new_h = int(src_h * ratio) + resized = source.resize((new_w, new_h), Image.LANCZOS) + + # 居中裁剪到画布尺寸 + left = (new_w - size) // 2 + top = (new_h - size) // 2 + return resized.crop((left, top, left + size, top + size)) + + def generate_icns(source: Image.Image, output_path: str): """生成 macOS .icns 文件""" import tempfile @@ -79,10 +98,10 @@ def generate_icns(source: Image.Image, output_path: str): iconset_dir = tempfile.mkdtemp(suffix=".iconset") for sz in sizes: - img = compose_icon(sz, source) + img = compose_icon(sz, source, rounded=True) img.save(os.path.join(iconset_dir, f"icon_{sz}x{sz}.png")) if sz <= 512: - img2x = compose_icon(sz * 2, source) + img2x = compose_icon(sz * 2, source, rounded=True) img2x.save(os.path.join(iconset_dir, f"icon_{sz}x{sz}@2x.png")) subprocess.run( @@ -102,7 +121,8 @@ def generate_ico(source: Image.Image, output_path: str): entries = [] for sz in sizes: - img = compose_icon(sz, source) + # Windows .ico 填满画布,无圆角,无透明边距 + img = compose_icon_windows(sz, source) buf = io.BytesIO() img.save(buf, format="PNG") data = buf.getvalue() @@ -137,9 +157,10 @@ def main(): compose_icon(size, source).save(path) print(f"已生成: {filename} ({size}x{size})") + # Windows Square Logo 填满画布,无圆角,无透明边距 for filename, size in SQUARE_SIZES: path = os.path.join(ICONS_DIR, filename) - compose_icon(size, source).save(path) + compose_icon_windows(size, source).save(path) print(f"已生成: {filename} ({size}x{size})") generate_icns(source, os.path.join(ICONS_DIR, "icon.icns")) diff --git a/tauri-app/src-tauri/icons/Square107x107Logo.png b/tauri-app/src-tauri/icons/Square107x107Logo.png index 281c418..3d4c048 100644 Binary files a/tauri-app/src-tauri/icons/Square107x107Logo.png and b/tauri-app/src-tauri/icons/Square107x107Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square142x142Logo.png b/tauri-app/src-tauri/icons/Square142x142Logo.png index 78b95d4..9e43ebc 100644 Binary files a/tauri-app/src-tauri/icons/Square142x142Logo.png and b/tauri-app/src-tauri/icons/Square142x142Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square150x150Logo.png b/tauri-app/src-tauri/icons/Square150x150Logo.png index 55fd7b5..615f175 100644 Binary files a/tauri-app/src-tauri/icons/Square150x150Logo.png and b/tauri-app/src-tauri/icons/Square150x150Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square284x284Logo.png b/tauri-app/src-tauri/icons/Square284x284Logo.png index 31b7e19..b58ae48 100644 Binary files a/tauri-app/src-tauri/icons/Square284x284Logo.png and b/tauri-app/src-tauri/icons/Square284x284Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square30x30Logo.png b/tauri-app/src-tauri/icons/Square30x30Logo.png index d2e2d01..ae9bb77 100644 Binary files a/tauri-app/src-tauri/icons/Square30x30Logo.png and b/tauri-app/src-tauri/icons/Square30x30Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square310x310Logo.png b/tauri-app/src-tauri/icons/Square310x310Logo.png index 85af92f..e68cba4 100644 Binary files a/tauri-app/src-tauri/icons/Square310x310Logo.png and b/tauri-app/src-tauri/icons/Square310x310Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square44x44Logo.png b/tauri-app/src-tauri/icons/Square44x44Logo.png index b0fa944..165dae1 100644 Binary files a/tauri-app/src-tauri/icons/Square44x44Logo.png and b/tauri-app/src-tauri/icons/Square44x44Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square71x71Logo.png b/tauri-app/src-tauri/icons/Square71x71Logo.png index 2d32d12..4b72c14 100644 Binary files a/tauri-app/src-tauri/icons/Square71x71Logo.png and b/tauri-app/src-tauri/icons/Square71x71Logo.png differ diff --git a/tauri-app/src-tauri/icons/Square89x89Logo.png b/tauri-app/src-tauri/icons/Square89x89Logo.png index 7c69be1..c80494c 100644 Binary files a/tauri-app/src-tauri/icons/Square89x89Logo.png and b/tauri-app/src-tauri/icons/Square89x89Logo.png differ diff --git a/tauri-app/src-tauri/icons/StoreLogo.png b/tauri-app/src-tauri/icons/StoreLogo.png index cf0a079..dcb6678 100644 Binary files a/tauri-app/src-tauri/icons/StoreLogo.png and b/tauri-app/src-tauri/icons/StoreLogo.png differ diff --git a/tauri-app/src-tauri/icons/icon.ico b/tauri-app/src-tauri/icons/icon.ico index 25d55fe..1295df4 100644 Binary files a/tauri-app/src-tauri/icons/icon.ico and b/tauri-app/src-tauri/icons/icon.ico differ