Files
IDE-Demo-B/assets/limpiar-iconos.py
T
2026-09-08 23:10:28 -03:00

110 lines
3.7 KiB
Python

import os
import xml.etree.ElementTree as ET
from pathlib import Path
import shutil
def convertir_a_current_color(archivo_entrada, archivo_salida=None, backup=True):
"""
Convierte todos los colores fijos en un SVG a currentColor.
Preserva las opacidades y transparencias.
"""
if archivo_salida is None:
path = Path(archivo_entrada)
archivo_salida = path.parent / f"{path.stem}_color{path.suffix}"
try:
# Leer el archivo
with open(archivo_entrada, 'r', encoding='utf-8') as f:
contenido = f.read()
# Parsear XML
tree = ET.ElementTree(ET.fromstring(contenido))
root = tree.getroot()
# Registrar namespace
ET.register_namespace('', 'http://www.w3.org/2000/svg')
# Procesar TODOS los elementos con fill o stroke
elementos_modificados = 0
for elem in root.iter():
# Procesar fill
if 'fill' in elem.attrib:
fill = elem.get('fill')
# Si no es none, ni currentColor, ni url(), reemplazar
if fill and fill.lower() not in ['none', 'currentcolor'] and not fill.startswith('url'):
elem.set('fill', 'currentColor')
elementos_modificados += 1
# Procesar stroke
if 'stroke' in elem.attrib:
stroke = elem.get('stroke')
if stroke and stroke.lower() not in ['none', 'currentcolor'] and not stroke.startswith('url'):
elem.set('stroke', 'currentColor')
elementos_modificados += 1
# Limpiar metadata innecesaria (opcional)
for metadata in root.findall('.//metadata'):
parent = root.find('.//g') or root
if parent is not None:
parent.remove(metadata)
# Guardar el archivo
tree.write(archivo_salida, encoding='utf-8', xml_declaration=True)
print(f"✅ {Path(archivo_entrada).name} → {elementos_modificados} elementos convertidos")
return True
except Exception as e:
print(f"❌ Error con {archivo_entrada}: {str(e)}")
return False
def procesar_carpeta(carpeta):
"""
Procesa todos los SVG en una carpeta
"""
carpeta_path = Path(carpeta)
if not carpeta_path.exists():
print(f"❌ La carpeta {carpeta} no existe")
return
# Buscar todos los SVG (excepto los que ya tienen _color)
archivos = [f for f in carpeta_path.glob('*.svg') if '_color' not in f.name]
if not archivos:
print(f"⚠️ No se encontraron archivos SVG en {carpeta}")
return
print(f"🔍 Encontrados {len(archivos)} archivos")
print("=" * 50)
# Crear carpeta de backup
backup_dir = carpeta_path / 'backup_originales'
backup_dir.mkdir(exist_ok=True)
for archivo in archivos:
# Hacer backup
shutil.copy2(archivo, backup_dir / archivo.name)
# Generar nombre de salida (sobrescribir el original o crear nuevo)
# Opción 1: Sobrescribir el original (CUIDADO)
# salida = archivo
# Opción 2: Crear nuevo archivo con sufijo _color (RECOMENDADO)
salida = archivo.parent / f"{archivo.stem}_color{archivo.suffix}"
convertir_a_current_color(str(archivo), str(salida))
print("=" * 50)
print(f"💾 Backups guardados en: {backup_dir}")
print(f"📁 Archivos convertidos con sufijo '_color'")
# ============= EJECUTAR =============
if __name__ == "__main__":
# Cambia esta ruta a tu carpeta de iconos
CARPETA = "./iconos" # Tu ruta
procesar_carpeta(CARPETA)