¿Cómo incrusto varios tamaños en un archivo .ico?

16

He visto íconos .ico que tienen diferentes imágenes para múltiples tamaños, por ejemplo. 16x16, 32x32, 48x48, 128x128, 256x256. En Windows, ¿cómo puedo crear un archivo de icono que admita múltiples tamaños de esta manera, dado que tengo archivos .ico existentes para cada tamaño? Tenga en cuenta que espero hacer esto en más de 200 archivos, por lo que sería ideal hacerlo desde cmd.

Suchipi
fuente

Respuestas:

28

ImageMagick (Windows / Mac / Linux) contiene una herramienta de línea de comandos llamada convertque se puede usar para muchas cosas, incluido el empaquetado de múltiples imágenes en un solo icono:

convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico

El comando anterior toma 5 imágenes PNG y las combina en un solo archivo .ico.

A diferencia de las otras respuestas, este método se puede usar fácilmente en scripts por lotes para generar automáticamente varios archivos de iconos. En uno de mis proyectos, tengo una sola imagen vectorial (SVG) y uso Inkscape para generar png de varios tamaños, seguido de convertcrear un contenedor de iconos. Este es un ejemplo reducido (en un script bash):

#!/bin/bash
for size in 16 32 48 128 256; do
    inkscape -z -e $size.png -w $size -h $size icon.svg >/dev/null 2>/dev/null
done
convert 16.png 32.png 48.png 128.png 256.png -colors 256 icon.ico
Rob W
fuente
1
Hombre, siento que aprendo una nueva forma de usar ImageMagick's convertcada vez que lo veo. ¡Gracias por la respuesta!
Suchipi
¿Cómo haces lo contrario? ¿Convierte un .icoarchivo a PNG múltiples, según los tamaños que contiene?
Flimm
2
@Flimm convert favicon.ico favicon.pnggenera favicon-0.png, favicon-1.pngetc. para cada ícono en el marco. Si desea conocer las dimensiones de la imagen, use el identifycomando en el archivo png.
Rob W
Puede usar imagemagicks propios en convert <icon.png> -resize 64x64lugar de inkscape
kumarharsh
Agregué -dither Noneal comando de conversión porque la conversión predeterminada a 256 colores agregó algo de ruido a mi ícono
James Roth
7

Mejor comando para ImageMagick:

convert in.jpg -define icon:auto-resize=16,48,256 -compress zip out.ico

fuente
1
Esta es una gran respuesta en realidad. Use este comando para probar que el archivo se ha convertido realmente:identify out.ico
kumarharsh
5

Puedes hacer esto gratis en GIMP . Hay breves instrucciones para hacer esto aquí .

Citar:

  1. Abre tu imagen en Gimp
  2. Haz tu lienzo cuadrado
  3. Cambia el tamaño de tu capa a la imagen
  4. Escale la capa al tamaño más grande en su archivo .ico como 64 píxeles
  5. Duplicar la capa
  6. Escala la capa duplicada al siguiente tamaño
  7. Siga duplicando / escalando para todos los tamaños que desee en su archivo .ico
  8. Guardar como .ico

En su caso, puede comenzar con la imagen más grande y reducir la escala para cada imagen duplicada, o simplemente puede agregar nuevas capas e importar las imágenes de iconos específicas que desea en esa capa.

tortuga
fuente
¿Cómo se admiten múltiples profundidades de color con este método?
Random832
No puedo decir que haya tenido que hacerlo personalmente, pero esta publicación dice que GIMP debería abrir un cuadro de diálogo de configuración de color para cada capa al guardar.
techturtle
Tienes que elegir exportar en Gimp 2.8.16, pero años después, puedo confirmar que hay un cuadro de diálogo para la configuración de color cuando exportas el ico.
Broots Waymb
1

Aquí está la respuesta aceptada por Rob W , con una adaptación trivial para evitar tener que escribir los tamaños (16, 32, etc.) más de una vez:

#!/bin/bash
files=()
for size in 16 32 48 128 256; do
    inkscape -z -e "$size.png" -w "$size" -h "$size" logo.svg > /dev/null 2> /dev/null
    files+=("$size.png")
done
convert "${files[@]}" -colors 256 favicon.ico
unlink  "${files[@]}"

Aquí logo.svgrepresenta la imagen de entrada (fuente), a partir del cual se crea archivos más pequeños de los tamaños deseados ( 16.png, 32.png, etc.) que luego se combinan en el archivo de icono de salida (resultado), favicon.ico. Puede cambiar la lista de tamaños en la línea 3, por ejemplo, a "16 24 32 48 64 72 128", y el convertcomando se adaptará automáticamente en consecuencia, porque este script utiliza la técnica descrita por G-Man en su respuesta aquí para construir un matriz de nombres de archivo. Y finalmente, desvinculamos (eliminamos) los archivos PNG creados en la línea 4, utilizando nuevamente la matriz de nombres de archivos.


He notado que el comando:

convert logo.svg -define icon:auto-resize=16,48,256 -compress zip favicon.ico

(equivalente al que se presenta en la respuesta del usuario 400747 ) en realidad escaló la imagen de mapa de bits (calidad perdida) y las capas de fondo perdieron transparencia.

Andris Petrams
fuente
1
(1) Usted esencialmente ha copiado la respuesta de otra persona. Si hicieras eso y nada más (sí, la gente a veces lo hace), estaría marcando tu respuesta para eliminarla. No estoy haciendo eso, porque hiciste una pequeña mejora. Pero, cada vez que copie el trabajo de otra persona, debe reconocer al autor original por su nombre y vincularlo con la información que está citando. (2) No diga cosas como "esto es más flexible" sin explicar lo que quiere decir. … (Continúa)
Scott,
(Cont.) ... (3) Siempre debe citar variables de shell a menos que tenga una buena razón para no hacerlo, y esté seguro de saber lo que está haciendo. En realidad, de todos los ejemplos que he visto de scripts que usan variables de shell sin citarlos, el suyo (es decir, el de Rob W ) puede estar entre los menos malos. Pero aún así, es mejor citar las variables. (4) ¿Por qué usas en unlinklugar del más común rm?
Scott
1

Archivo por lotes de Windows, que crea .PNG de varios tamaños y los combina en un archivo .ICO:

@echo off

set inkScape="C:\SOFTWARE\GRAPHIC\INKSCAPE\inkscape.exe"
set imageMagick="C:\SOFTWARE\DEVELOPER\IMAGEMAGICK\magick.exe"
set fileName=favicon
set importType=svg
set exportType=png
set exportDpi=300
set imageSizes=(16 24 32 48 57 60 64 70 72 76 96 114 120 128 144 150 152 180 192 196 256 300 320 400 450 460 480 512 600)

for %%s in %imageSizes% do (
 %inkScape% -z -f %~dp0%fileName%.%importType% -w %%s -h %%s -e %~dp0%fileName%-%%sx%%s.%exportType% -d %exportDpi%
 echo CREATED: %fileName%-%%sx%%s.%exportType%
 set e=%fileName%-%%sx%%s.%exportType%
 call :concat (e)
)

%imageMagick% %exportFileNames%"%~dp0%fileName%.ico"
echo MERGED IN: %fileName%.ico

pause goto :eof


:concat (e) (
 set exportFileNames=%exportFileNames%"%~dp0%e%" 
)

Si no necesita los archivos .PNG, puede eliminarlos (o eliminarlos) del FILEo guardar todos los PNG dentro de un directorio que puede eliminar (después %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Espero que ayude a alguien. :)

Froschkoenig84
fuente
0

Es mi opinión que Axialis IconMaker es la mejor solución para los problemas de iconos. Hay una prueba de 30 días que probablemente resolverá el problema por usted.

He usado Axialis durante tantos años y en muchos proyectos, puedo dar fe de que es un producto realmente valioso. ¡No necesitarás 30 días! ¡Decir ah!

Jerry Nixon
fuente
0

Debe utilizar un programa de edición de iconos de terceros porque MSPaint solo admite un único icono por archivo. Aquí hay un par de hilos con recomendaciones para editores de iconos, algunos gratuitos y otros comerciales.

Una vez que se haya decidido por un editor de iconos, el método para agregar formatos de iconos variará, pero generalmente será similar (haga clic en un botón o seleccione un elemento del menú para agregar un nuevo formato). La mayoría de los programas le permitirán importar un archivo de icono al agregar un formato / tamaño de icono, pero la mayoría también le permitirá crear un nuevo formato / tamaño a partir del existente al cambiar su tamaño.

Si elige usar la opción de crear desde existente al agregar un nuevo formato / tamaño, asegúrese de crearlos desde el formato de icono más grande que ya tenga disponible, ya que tendrá la mayor cantidad de datos para que el algoritmo de cambio de tamaño funcione . Además, asegúrese de usar una versión con transparencia al crear un icono de XP / Vista ya que la mayoría de los programas no son excelentes para crear el canal alfa desde cero.

Synetech
fuente
Necesito hacer esto para más de 200 iconos. ¿Puede alguno de esos editores de iconos ejecutar cosas en lote?
Suchipi
1
No recuerdo haber visto nunca un editor de iconos con modo por lotes. Podría intentar usar un editor de imágenes en modo por lotes, pero no estoy seguro de si alguno de los editores de imágenes admite íconos multiformato (al menos no desde la línea de comandos / modo por lotes). Si alguno lo hace, sería ImageMagick. Además, debe agregar el requisito de volumen y modo por lotes a la pregunta.
Synetech
0

Puedes probar png2ico de Matthias Benkmann . Es gratis y puede empaquetar png de varios tamaños en un solo archivo ico.

Dimitri C.
fuente
Sin embargo, tiene algunas restricciones interesantes:Width must be multiple of 8 and <256. Height must be <256.
Francois Botha