-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathgenerate_icons.py
More file actions
114 lines (95 loc) · 3.56 KB
/
Copy pathgenerate_icons.py
File metadata and controls
114 lines (95 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env python3
"""
Icon Generator for TBSOC
Converts tbsoc_logo.png to .icns (macOS) and .ico (Windows) formats
"""
import os
import sys
from pathlib import Path
try:
from PIL import Image
except ImportError:
print("Error: Pillow is required. Install with: pip install Pillow")
sys.exit(1)
def generate_icons():
"""Generate .icns and .ico files from tbsoc_logo.png"""
# Paths
base_dir = Path(__file__).parent
source_png = base_dir / "tbsoc_logo.png"
output_dir = base_dir / "resources"
output_dir.mkdir(exist_ok=True)
if not source_png.exists():
print(f"Error: {source_png} not found!")
sys.exit(1)
# Load source image
img = Image.open(source_png)
# Convert to RGBA if needed
if img.mode != 'RGBA':
img = img.convert('RGBA')
print(f"Source image: {source_png}")
print(f"Original size: {img.size}")
# Generate Windows .ico (multiple sizes)
ico_path = output_dir / "icon.ico"
ico_sizes = [(16, 16), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
ico_images = []
for size in ico_sizes:
resized = img.resize(size, Image.Resampling.LANCZOS)
ico_images.append(resized)
ico_images[0].save(
ico_path,
format='ICO',
sizes=ico_sizes,
append_images=ico_images[1:]
)
print(f"✓ Created Windows icon: {ico_path}")
# Generate macOS .icns
# For .icns, we need to create an iconset directory with specific sizes
icns_path = output_dir / "icon.icns"
iconset_dir = output_dir / "icon.iconset"
iconset_dir.mkdir(exist_ok=True)
# macOS icon sizes (https://developer.apple.com/design/human-interface-guidelines/macos/icons-and-images/app-icon/)
icns_sizes = [
(16, 'icon_16x16.png'),
(32, 'icon_16x16@2x.png'),
(32, 'icon_32x32.png'),
(64, 'icon_32x32@2x.png'),
(128, 'icon_128x128.png'),
(256, 'icon_128x128@2x.png'),
(256, 'icon_256x256.png'),
(512, 'icon_256x256@2x.png'),
(512, 'icon_512x512.png'),
(1024, 'icon_512x512@2x.png'),
]
for size, filename in icns_sizes:
resized = img.resize((size, size), Image.Resampling.LANCZOS)
resized.save(iconset_dir / filename, 'PNG')
print(f"✓ Created iconset: {iconset_dir}")
# Convert iconset to icns using macOS iconutil (if on macOS)
if sys.platform == 'darwin':
import subprocess
try:
subprocess.run(
['iconutil', '-c', 'icns', str(iconset_dir), '-o', str(icns_path)],
check=True
)
print(f"✓ Created macOS icon: {icns_path}")
# Clean up iconset directory
import shutil
shutil.rmtree(iconset_dir)
print(f"✓ Cleaned up temporary iconset directory")
except subprocess.CalledProcessError as e:
print(f"Warning: Could not create .icns file: {e}")
print(f"Iconset directory preserved at: {iconset_dir}")
else:
print(f"⚠ Not on macOS - .icns creation requires iconutil")
print(f" Iconset directory created at: {iconset_dir}")
print(f" Run 'iconutil -c icns {iconset_dir}' on macOS to create .icns")
print("\n✅ Icon generation complete!")
print(f"\nGenerated files:")
print(f" - {ico_path} (Windows)")
if icns_path.exists():
print(f" - {icns_path} (macOS)")
else:
print(f" - {iconset_dir}/ (macOS iconset - needs iconutil)")
if __name__ == '__main__':
generate_icons()