Come posso incorporare più dimensioni in un file .ico?


16

Ho visto icone .ico che hanno immagini diverse per più dimensioni, ad es. 16x16, 32x32, 48x48, 128x128, 256x256. Su Windows, come posso creare un file icona che supporta più dimensioni in questo modo, dato che ho file .ico esistenti per ogni dimensione? Si prega di notare che spero di fare questo su oltre 200 file, quindi farlo da cmd sarebbe l'ideale.

Risposte:


28

ImageMagick (Windows / Mac / Linux) contiene uno strumento da riga di comando chiamato convertche può essere utilizzato per molte cose, incluso il confezionamento di più immagini in un'unica icona:

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

Il comando precedente prende 5 immagini PNG e le combina in un singolo file .ico.

A differenza delle altre risposte, questo metodo può essere facilmente utilizzato negli script batch per generare automaticamente diversi file di icone. In uno dei miei progetti, ho una singola immagine vettoriale (SVG) e uso Inkscape per generare png di varie dimensioni, seguiti da convertcreare un contenitore di icone. Questo è un esempio ridotto (in uno 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

1
Amico, mi sento come se imparassi un nuovo modo di usare ImageMagick convertogni volta che lo guardo. Grazie per la risposta!
Suchipi,

Come si fa il contrario? Convertire un .icoin più PNG, in base alle dimensioni che contiene?
Flimm,

2
@Flimm convert favicon.ico favicon.pnggenera favicon-0.png, favicon-1.pngecc. Per ogni icona nella cornice. Se vuoi conoscere le dimensioni dell'immagine, usa il identifycomando sul file png.
Rob W,

Puoi usare imagemagicks al convert <icon.png> -resize 64x64posto di inkscape
kumarharsh,

Ho aggiunto -dither Noneal comando di conversione perché la conversione predefinita in 256 colori ha aggiunto un po 'di rumore alla mia icona
James Roth,

7

Migliore comando per ImageMagick:

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

1
Questa è davvero un'ottima risposta. Utilizzare questo comando per verificare che il file sia stato effettivamente convertito:identify out.ico
kumarharsh,

5

Puoi farlo gratuitamente in GIMP . Ci sono brevi istruzioni per farlo qui .

Per citare:

  1. Apri la tua immagine in Gimp
  2. Rendi la tua tela quadrata
  3. Ridimensiona il tuo livello sull'immagine
  4. Ridimensiona il livello alla dimensione massima nel tuo file .ico come 64 pixel
  5. Duplica il livello
  6. Ridimensiona il livello duplicato alla dimensione successiva
  7. Continua a duplicare / ridimensionare per tutte le dimensioni che desideri nel tuo file .ico
  8. Salva come .ico

Nel tuo caso, potresti iniziare con l'immagine più grande e ridimensionarla per ogni immagine duplicata, oppure puoi semplicemente aggiungere nuovi livelli e importare le immagini icona specifiche che desideri in quel livello.


Come si supportano più profondità di colore con questo metodo?
Casuale 832

Non posso dire che ho dovuto farlo personalmente, ma questo post dice che GIMP dovrebbe far apparire una finestra di dialogo delle impostazioni del colore per ogni livello al momento del salvataggio.
techturtle,

Devi scegliere di esportare in Gimp 2.8.16 ma anni dopo, posso confermare che c'è una finestra di dialogo per le impostazioni del colore quando esporti ico.
Broots Waymb

1

Ecco la risposta accettata da Rob W , con un banale adattamento per evitare di dover digitare le dimensioni (16, 32, ecc.) Più di una volta:

#!/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[@]}"

Qui logo.svgrappresenta l'immagine in ingresso (sorgente), da cui creiamo i file più piccoli delle dimensioni desiderate ( 16.png, 32.png, ecc), che abbiamo poi combinare in file di icona di output (risultato), favicon.ico. Puoi modificare l'elenco delle dimensioni nella riga 3, ad esempio, in "16 24 32 48 64 72 128", e il convertcomando si adatterà automaticamente di conseguenza, poiché questo script utilizza la tecnica descritta da G-Man nella sua risposta qui per creare un matrice di nomi di file. E infine scolleghiamo (rimuoviamo) i file PNG creati nella riga 4, usando nuovamente l'array di nomi di file.


Ho notato che il comando:

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

(equivalente a quello presentato nella risposta dell'utente 400747 ) l'immagine bitmap effettivamente ridimensionata (qualità perduta) e lo sfondo dei livelli ha perso la trasparenza.


1
(1) Hai essenzialmente copiato la risposta di qualcun altro. Se lo facessi e niente di più (sì, a volte le persone lo fanno), contrassegnerei la tua risposta per la cancellazione. Non lo sto facendo, perché hai fatto un piccolo miglioramento. Ma, ogni volta che copi il lavoro di qualcun altro, dovresti riconoscere l'autore originale per nome e collegandoti alle informazioni che stai citando. (2) Per favore, non dire cose come "questo è più flessibile" senza spiegare cosa intendi. ... (proseguendo)
Scott,

(Proseguendo) ... (3) Dovresti sempre citare le variabili della shell a meno che tu non abbia una buona ragione per non farlo, e sei sicuro di sapere cosa stai facendo. In realtà, di tutti gli esempi che ho visto di script che usano variabili di shell senza citarle, le tue (es. Quelle di Rob W ) potrebbero essere tra le meno negative. Tuttavia, è meglio citare le variabili. (4) Perché usi unlinkinvece dei più comuni rm?
Scott,

1

File batch di Windows, che crea file .PNG di dimensioni multiple e li unisce in un file .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%" 
)

Se non hai bisogno dei file .PNG, puoi eliminarli (o rimuoverli) del FILEoppure salvare tutti i PNG all'interno di una directory che puoi rimuovere (dopo %imageMagick% %exportFileNames%"%~dp0%fileName%.ico").

Spero che aiuti qualcuno. :)


0

Ritengo che Axialis IconMaker sia la migliore soluzione ai problemi relativi alle icone. C'è una prova di 30 giorni che probabilmente risolverà il problema per te.

Ho usato Axialis per così tanti anni e su così tanti progetti, posso attestare che è un prodotto davvero utile. Non avrai bisogno di 30 giorni! Ha!


0

È necessario utilizzare un programma di modifica delle icone di terze parti poiché MSPaint supporta solo una singola icona per file. Ci sono un paio di discussioni qui con consigli per gli editor di icone, alcuni gratuiti, altri commerciali.

Una volta impostato su un editor di icone, il metodo di aggiunta dei formati di icona varierà ma sarà generalmente simile (fai clic su un pulsante o selezioni una voce di menu per aggiungere un nuovo formato). La maggior parte dei programmi ti consente di importare un file icona quando aggiungi un formato / dimensione icona, ma la maggior parte ti consente anche di creare un nuovo formato / dimensione da quello esistente ridimensionandolo.

Se scegli di utilizzare l' opzione Crea da esistente quando aggiungi un nuovo formato / dimensione, assicurati di crearli dal formato icona più grande che hai già disponibile poiché avrà la maggior parte dei dati per l'algoritmo di ridimensionamento con cui lavorare . Inoltre, assicurati di utilizzare una versione con trasparenza quando crei un'icona XP / Vista poiché la maggior parte dei programmi non è eccezionale nella creazione del canale alfa da zero.


Devo farlo con oltre 200 icone. Qualcuno di questi editor di icone può eseguire le cose in batch?
Suchipi,

1
Non ricordo di aver mai visto un editor di icone in modalità batch. Potresti provare a utilizzare un editor di immagini in modalità batch, ma non sono sicuro che qualsiasi editor di immagini abbia il supporto di icone multiformato (almeno non dalla riga di comando / modalità batch). Se lo fosse, sarebbe ImageMagick. Inoltre, è necessario aggiungere il volume e i requisiti della modalità batch alla domanda.
Synetech,

0

Potresti provare il png2ico di Matthias Benkmann . È gratuito e può contenere png di dimensioni diverse in un singolo file ico.


Ha alcune restrizioni interessanti, tuttavia:Width must be multiple of 8 and <256. Height must be <256.
Francois Botha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.