2009-02-08 15 views
17

He intentado incrustar un icono (.ico) en mi "compilado" .exe con py2exe.¿Icono de incrustación en .exe con py2exe, visible en Vista?

py2exe tiene una forma de incrustar un icono:

windows=[{ 
    'script':'MyScript.py', 
    'icon_resources':[(1,'MyIcon.ico')] 
}] 

Y eso es lo que estoy utilizando. El ícono aparece bien en Windows XP o más bajo, pero no se muestra en absoluto en Vista. Supongo que esto se debe al nuevo formato de icono de Vista, que puede tener formato PNG, hasta 256x256 píxeles.

Entonces, ¿cómo puedo obtener py2exe para incrustarlos en mi ejecutable, sin romper los iconos en Windows XP?

Me da gusto hacerlo con una utilidad externa en lugar de py2exe - He intentado con this command-line utility para incrustarlo, pero siempre corrompe mi exe y trunca su tamaño por alguna razón.

Respuesta

20

Vista utiliza iconos de alta resolución 256x256 píxeles imágenes, éstas se almacenan utilizando compresión basada en PNG . El problema es si simplemente hace que el icono y lo guarde en el formato estándar de XP ICO, el archivo resultante será 400Kb en el disco. La solución es comprimir las imágenes. El esquema de compresión utilizado es PNG (Portable Network Graphic) porque tiene una buena relación sin pérdidas y admite el canal alfa.

y el uso

png2ico myicon.ico logo16x16.png logo32x32.png logo255x255.png 

Se crea un archivo ICO de 1 o más PNG 's y se ocupa de múltiples tamaños, etc. Y supongo XP no tendría ningún problema con eso.

+1

El icono creado por png2ico funciona, pero png2ico se niega a usar la versión PNG 256x256 de mi icono, solo toma tamaños más pequeños. (Dice: "El ancho debe ser múltiplo de 8 y <256. La altura debe ser <256"). ¿Hay alguna forma de evitar esta limitación? –

+0

¿Tal vez su resolución máxima sea 255x255? Me imagino que no se verá muy diferente ... –

+1

He generado un icono válido con png2ico (con un tamaño máximo de 248) y lo he especificado correctamente en py2exe setup.py, pero todavía no aparece como el icono de exe generado en el explorador. Resource Hacker muestra que el ícono está incrustado en el exe, pero Explorer no. Esto es raro. – James

4

Parece que el orden de los tamaños de los iconos es la clave, como dijo Helmut. Para invertir las páginas (las más grandes primero) resuelve el problema en Windows 7 para 'include_resources' (usando Py2exe 0.6.9).

3

El enlace al Greenfish Iceon Editor Pro está roto. Escaneé la red y encontré Download IcoFX Utilicé el programa IcoFX en mi archivo .exe y pude ver que efectivamente contenía mi ícono.

Utilizando el menú Imagen-> Crear iconos de Windows desde la imagen, y luego aceptar las opciones Obtuve un nuevo archivo .ico que funcionó tanto en win7 como en win xp.

Antes, mi archivo 48x48.ico solo no aparecía como un ícono para el programa.

+0

Solo quería decir que IcoFX funcionaba perfectamente y era compatible con el canal alfa de nuestro logotipo. Png2ico funcionó, pero nuestro ícono parecía pixelado y no era lo suficientemente bueno para una aplicación profesional. Aún así, Png2ico es gratuito e IcoFX no lo es (aunque hay una versión de prueba gratuita y puede exportar con ella). Para hacer el ícono correcto en IcoFX, fue realmente fácil, simplemente lo arrastré y lo dejé caer directamente desde un formato .PNG de 256x256, hice clic en Guardar e hizo un ícono de Windows con todos los formatos que funcionaban con Py2exe. (Incluyendo los formatos de baja resolución para sistemas operativos más antiguos). – SilentSteel

4

Estaba teniendo problemas para insertar el recurso de icono con py2exe en Windows7 usando un archivo .ico que contiene una imagen de 32x32 píxeles. Estaba usando el mismo método que la pregunta original.

Una vez compilado, el ícono en el archivo exe desaparece. En la investigación, el ícono se agrega al índice 0, según la herramienta Resource Hacker, pero si uso la misma herramienta para reemplazar el ícono, se agrega al índice 1. Una vez en el índice 1, el ícono aparece mágicamente en el explorador contra el exe nuevamente.

Si está desesperado, podría utilizar Resource Hacker para modificar el exe de construcción posterior y se puede crear mediante la interfaz de línea de comandos, pero probé el método explicado anteriormente y logré que funcionara después de invertir los archivos png como tal .

png2ico.exe myico.ico myico248x248.png myico48x48.png myico32x32.png myico16x16.png 

Por cierto mediante la adición de varios iconos en el archivo ico, a continuación, está completando el recurso en el índice 1 icono de todas formas, en este caso myico248x248.png.

+0

Tuve el mismo problema. Una vez que envolví varias imágenes en el archivo de icono, finalmente funcionó. –

+0

Tuve este problema, pero 'myicon248x248.png' aún terminaría en el recurso 0. ver https://stackoverflow.com/a/36116599/57461 – Pod

Cuestiones relacionadas