54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate favicon.ico from SVG using cairosvg and PIL
|
|
"""
|
|
|
|
import os
|
|
import io
|
|
from cairosvg import svg2png
|
|
from PIL import Image
|
|
|
|
# Verzeichnis dieses Skripts
|
|
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
def svg_to_ico(svg_path, ico_path, sizes=[16, 32, 48, 64, 128, 256]):
|
|
"""Convert SVG to multi-size ICO file"""
|
|
img_io = io.BytesIO()
|
|
|
|
# Höchste Auflösung für Zwischenspeicherung
|
|
max_size = max(sizes)
|
|
|
|
# SVG in PNG konvertieren
|
|
with open(svg_path, 'rb') as svg_file:
|
|
svg_data = svg_file.read()
|
|
svg2png(bytestring=svg_data, write_to=img_io, output_width=max_size, output_height=max_size)
|
|
|
|
# PNG in verschiedene Größen konvertieren
|
|
img = Image.open(img_io)
|
|
|
|
# Alle Größen für das ICO-Format vorbereiten
|
|
img_list = []
|
|
for size in sizes:
|
|
resized_img = img.resize((size, size), Image.LANCZOS)
|
|
img_list.append(resized_img)
|
|
|
|
# ICO-Datei speichern
|
|
img_list[0].save(
|
|
ico_path,
|
|
format='ICO',
|
|
sizes=[(img.width, img.height) for img in img_list],
|
|
append_images=img_list[1:]
|
|
)
|
|
print(f"Favicon {ico_path} wurde erstellt!")
|
|
|
|
# Ursprüngliches Favicon konvertieren
|
|
svg_to_ico(
|
|
os.path.join(CURRENT_DIR, 'favicon.svg'),
|
|
os.path.join(CURRENT_DIR, 'favicon.ico')
|
|
)
|
|
|
|
# Neues Neuron-Favicon konvertieren
|
|
svg_to_ico(
|
|
os.path.join(CURRENT_DIR, 'neuron-favicon.svg'),
|
|
os.path.join(CURRENT_DIR, 'neuron-favicon.ico')
|
|
) |