Some checks failed
Build, MSI & Deploy / Build Docker images (push) Failing after 6m30s
Build, MSI & Deploy / Deploy to Dokploy (push) Has been skipped
Build, MSI & Deploy / Build Edge Agent Binaries (push) Failing after 1s
Build, MSI & Deploy / Send notification (push) Successful in 0s
Build, MSI & Deploy / Build Edge Agent MSI (push) Has been skipped
114 lines
4.5 KiB
Python
114 lines
4.5 KiB
Python
import os
|
|
import sys
|
|
import subprocess
|
|
|
|
# Asegurar que Pillow este instalado
|
|
try:
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
except ImportError:
|
|
print("Pillow no esta instalado. Instalando...")
|
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "Pillow"])
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
def generate_assets():
|
|
wix_dir = os.path.dirname(os.path.abspath(__file__))
|
|
agent_dir = os.path.dirname(wix_dir)
|
|
|
|
# Rutas
|
|
logo_path = os.path.join(agent_dir, "icon_custom.png")
|
|
if not os.path.exists(logo_path):
|
|
logo_path = os.path.join(agent_dir, "icon.png")
|
|
dialog_bmp_path = os.path.join(wix_dir, "dialog.bmp")
|
|
banner_bmp_path = os.path.join(wix_dir, "banner.bmp")
|
|
|
|
# Paleta de colores OmniOil
|
|
color_bg = (9, 11, 15) # #090b0f
|
|
color_primary = (255, 122, 26) # #ff7a1a
|
|
color_text = (244, 247, 251) # #f4f7fb
|
|
color_muted = (154, 168, 186) # #9aa8ba
|
|
|
|
# Cargar logo si existe
|
|
logo = None
|
|
if os.path.exists(logo_path):
|
|
try:
|
|
logo = Image.open(logo_path).convert("RGBA")
|
|
print(f"Logo cargado desde {logo_path}")
|
|
except Exception as e:
|
|
print(f"No se pudo cargar el logo: {e}")
|
|
|
|
# ----------------------------------------------------
|
|
# 1. Generar dialog.bmp (493x312) - Bienvenida/Finalizacion
|
|
# ----------------------------------------------------
|
|
img_dialog = Image.new("RGB", (493, 312), color_bg)
|
|
draw_dialog = ImageDraw.Draw(img_dialog)
|
|
|
|
# Dibujar panel lateral con gradiente o color primario
|
|
draw_dialog.rectangle([0, 0, 164, 312], fill=(15, 20, 28)) # Un azul ligeramente mas claro
|
|
draw_dialog.rectangle([162, 0, 164, 312], fill=color_primary) # Linea naranja divisoria
|
|
|
|
# Colocar logo en el panel lateral
|
|
if logo:
|
|
# Redimensionar logo para el panel lateral (120x120)
|
|
logo_dialog = logo.resize((120, 120), Image.Resampling.LANCZOS)
|
|
# Pegar con canal alfa
|
|
img_dialog.paste(logo_dialog, (22, 96), logo_dialog)
|
|
|
|
# Textos principales (Usamos fuentes estandar para evitar fallos si no existe Geist)
|
|
try:
|
|
font_title = ImageFont.truetype("arial.ttf", 20)
|
|
font_subtitle = ImageFont.truetype("arial.ttf", 12)
|
|
font_body = ImageFont.truetype("arial.ttf", 10)
|
|
except IOError:
|
|
font_title = ImageFont.load_default()
|
|
font_subtitle = ImageFont.load_default()
|
|
font_body = ImageFont.load_default()
|
|
|
|
draw_dialog.text((185, 30), "OmniOil Analytics", fill=color_primary, font=font_title)
|
|
draw_dialog.text((185, 55), "Edge Agent Setup Wizard", fill=color_text, font=font_title)
|
|
|
|
body_text = (
|
|
"Este asistente instalara el componente de telemetria\n"
|
|
"Edge Agent en su equipo local.\n\n"
|
|
"El agente se ejecutara como un servicio de Windows en\n"
|
|
"segundo plano para recolectar y reportar datos industriales\n"
|
|
"bajo los lineamientos de la Resolucion ANH 0651/2025.\n\n"
|
|
"Desarrollado por KYRBOT INNOVATIONS S.A.S.\n"
|
|
"NIT 902002081-8"
|
|
)
|
|
draw_dialog.text((185, 110), body_text, fill=color_muted, font=font_body)
|
|
|
|
# Guardar como BMP de 24 bits
|
|
img_dialog.save(dialog_bmp_path, "BMP")
|
|
print(f"dialog.bmp generado exitosamente en {dialog_bmp_path}")
|
|
|
|
# ----------------------------------------------------
|
|
# 2. Generar banner.bmp (493x58) - Banner superior interno
|
|
# ----------------------------------------------------
|
|
img_banner = Image.new("RGB", (493, 58), color_bg)
|
|
draw_banner = ImageDraw.Draw(img_banner)
|
|
|
|
# Linea naranja inferior
|
|
draw_banner.rectangle([0, 56, 493, 58], fill=color_primary)
|
|
|
|
# Colocar logo pequeno a la derecha
|
|
if logo:
|
|
logo_banner = logo.resize((42, 42), Image.Resampling.LANCZOS)
|
|
img_banner.paste(logo_banner, (435, 8), logo_banner)
|
|
|
|
try:
|
|
font_banner_title = ImageFont.truetype("arial.ttf", 12)
|
|
font_banner_sub = ImageFont.truetype("arial.ttf", 9)
|
|
except IOError:
|
|
font_banner_title = ImageFont.load_default()
|
|
font_banner_sub = ImageFont.load_default()
|
|
|
|
draw_banner.text((15, 12), "OmniOil Edge Agent", fill=color_primary, font=font_banner_title)
|
|
draw_banner.text((15, 28), "Configuracion de Telemetria Industrial", fill=color_text, font=font_banner_sub)
|
|
|
|
# Guardar como BMP de 24 bits
|
|
img_banner.save(banner_bmp_path, "BMP")
|
|
print(f"banner.bmp generado exitosamente en {banner_bmp_path}")
|
|
|
|
if __name__ == "__main__":
|
|
generate_assets()
|