Files
local-transcription/create_icons.py

90 lines
2.7 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""
Create platform-specific icon files from LocalTranscription.png
Generates .ico (Windows) and .icns (macOS) from the PNG source.
"""
from PIL import Image
import sys
from pathlib import Path
def create_ico(png_path, ico_path):
"""Create Windows ICO file from PNG."""
img = Image.open(png_path)
# ICO files typically contain multiple sizes
# Windows uses 16, 32, 48, 256 pixel sizes
sizes = [(16, 16), (32, 32), (48, 48), (256, 256)]
# Create list of resized images
icons = []
for size in sizes:
resized = img.resize(size, Image.Resampling.LANCZOS)
icons.append(resized)
# Save as ICO
img.save(ico_path, format='ICO', sizes=sizes)
print(f"✓ Created {ico_path}")
def create_iconset_for_icns(png_path, iconset_dir):
"""Create .iconset directory with all required sizes for macOS ICNS."""
img = Image.open(png_path)
# macOS requires these specific sizes and naming
sizes = {
'icon_16x16.png': (16, 16),
'icon_16x16@2x.png': (32, 32),
'icon_32x32.png': (32, 32),
'icon_32x32@2x.png': (64, 64),
'icon_128x128.png': (128, 128),
'icon_128x128@2x.png': (256, 256),
'icon_256x256.png': (256, 256),
'icon_256x256@2x.png': (512, 512),
'icon_512x512.png': (512, 512),
'icon_512x512@2x.png': (1024, 1024),
}
iconset_dir.mkdir(exist_ok=True)
for filename, size in sizes.items():
resized = img.resize(size, Image.Resampling.LANCZOS)
output_path = iconset_dir / filename
resized.save(output_path, format='PNG')
print(f"✓ Created iconset directory: {iconset_dir}")
print(" To create ICNS on macOS, run:")
print(f" iconutil -c icns {iconset_dir}")
def main():
"""Main function to create all icon files."""
script_dir = Path(__file__).parent
png_path = script_dir / "LocalTranscription.png"
if not png_path.exists():
print(f"✗ Error: {png_path} not found!")
sys.exit(1)
print("Creating platform-specific icons from LocalTranscription.png...")
print("=" * 60)
# Create Windows ICO
ico_path = script_dir / "LocalTranscription.ico"
create_ico(png_path, ico_path)
# Create macOS iconset (need iconutil on macOS to convert to ICNS)
iconset_dir = script_dir / "LocalTranscription.iconset"
create_iconset_for_icns(png_path, iconset_dir)
print("=" * 60)
print("✓ Icon creation complete!")
print()
print("Files created:")
print(f" - {ico_path} (Windows)")
print(f" - {iconset_dir}/ (macOS - needs iconutil)")
print()
print("Note: On macOS, run this to create .icns:")
print(f" iconutil -c icns {iconset_dir}")
if __name__ == "__main__":
main()