TKK_E32231503/fix_icon.py

132 lines
3.9 KiB
Python

#!/usr/bin/env python3
"""
Fix App Icon - Add padding to prevent cropping on Android
"""
from PIL import Image, ImageDraw
import os
def create_icon_with_padding(input_path, output_path, padding_percent=15):
"""
Create icon with padding to fit Android adaptive icon safe zone
Android adaptive icons use a circular mask, so we need to ensure
the important content fits within a circle of ~80% of the icon size
"""
print(f"📷 Loading icon: {input_path}")
# Open original image
img = Image.open(input_path).convert('RGBA')
original_size = img.size[0]
print(f" Original size: {original_size}x{original_size}")
# Calculate new size with padding
padding = int(original_size * (padding_percent / 100))
new_size = original_size + (padding * 2)
print(f" Adding padding: {padding}px on each side")
print(f" New size: {new_size}x{new_size}")
# Create new image with transparent background
new_img = Image.new('RGBA', (new_size, new_size), (0, 0, 0, 0))
# Paste original image in center
new_img.paste(img, (padding, padding), img)
# Save result
new_img.save(output_path, 'PNG')
print(f"✅ Icon saved: {output_path}")
return output_path
def create_icon_with_background(input_path, output_path, bg_color='#1976D2', padding_percent=15):
"""
Create icon with colored background (better for adaptive icons)
"""
print(f"📷 Loading icon: {input_path}")
# Open original image
img = Image.open(input_path).convert('RGBA')
original_size = img.size[0]
print(f" Original size: {original_size}x{original_size}")
# Calculate new size with padding
padding = int(original_size * (padding_percent / 100))
new_size = original_size + (padding * 2)
print(f" Adding padding: {padding}px on each side")
print(f" New size: {new_size}x{new_size}")
print(f" Background color: {bg_color}")
# Create new image with colored background
new_img = Image.new('RGBA', (new_size, new_size), bg_color)
# Paste original image in center
new_img.paste(img, (padding, padding), img)
# Save result
new_img.save(output_path, 'PNG')
print(f"✅ Icon saved: {output_path}")
return output_path
if __name__ == '__main__':
import sys
print("🔧 Android Adaptive Icon Fixer")
print("=" * 50)
print()
# Paths
input_icon = 'assets/images/app_icon.png'
if not os.path.exists(input_icon):
print(f"❌ Error: Icon not found at {input_icon}")
sys.exit(1)
# Backup original
backup_path = 'assets/images/app_icon_backup.png'
if not os.path.exists(backup_path):
Image.open(input_icon).save(backup_path)
print(f"💾 Backup saved: {backup_path}")
print()
print("Choose icon style:")
print("1. Transparent background with padding (default)")
print("2. Blue background with padding (recommended for Android)")
print()
choice = input("Enter choice (1 or 2, default=2): ").strip() or "2"
print()
if choice == "1":
# Transparent with padding
create_icon_with_padding(
input_icon,
input_icon,
padding_percent=20
)
else:
# Blue background with padding
create_icon_with_background(
input_icon,
input_icon,
bg_color='#1976D2', # Material Blue
padding_percent=15
)
print()
print("=" * 50)
print("✅ Icon fixed successfully!")
print()
print("Next steps:")
print("1. Run: flutter pub run flutter_launcher_icons")
print("2. Build APK: flutter build apk --release")
print("3. Check the new icon on your device")
print()
print("If icon still looks wrong, try running this script again")
print("and choose the other option.")