Come convertire un SVG quadrato in ICO di tutte le dimensioni?


24

Ho disegnato un'icona in InkScape e vorrei esportarla in un file ICO che includesse gli sprite per tutte le risoluzioni ragionevoli (16x16, 32x32, ... 256x256 ecc.). Come è possibile farlo (senza utilizzare software enormi e costosi come Photoshop, CorelDraw ecc.)?


2
Una rapida ricerca mi dice che non c'è modo di esportare nemmeno un singolo ICO da InkScape, ma ci sono molti suggerimenti su come farlo con software gratuiti aggiuntivi come GIMP. Hai controllato quelle opzioni? Se non hanno funzionato per te, puoi dire perché no?
usr2564301,

@RadLexus quello che ho provato è un numero di strumenti online e tutti, per quanto ho potuto capire, significano creare ICOn a dimensione singola.
Ivan,

5
Quindi vuoi sapere come creare ICO di dimensioni multiple? Prova le opzioni in questa risposta Stack Overflow: stackoverflow.com/questions/4354617/… (di nuovo, trovato da una semplice query di Google ...).
usr2564301,

1
C'è un'estensione di Inkscape che sembra esportare come file ico , ma al momento non ho tempo per provare se funziona.
Paolo Gibellini,

Se hai trovato una delle risposte seguenti per rispondere alla tua domanda, contrassegnala come risposta accettata.
DᴀʀᴛʜVᴀᴅᴇʀ

Risposte:


24

Puoi usare ImageMagick immediatamente:

convert -density 384 icon.svg -define icon:auto-resize icon.ico

3
Perché quella densità?
niente101

1
Non lo so, ho appena incollato questo da altrove.
Heltonbiker,

@ naught101 ecco la documentazione per il flag di densità - sebbene, sembra che sia un passaggio piuttosto inutile a meno che tu non stia facendo qualcosa di molto specifico con dimensioni dell'immagine, dpi e la sua rasterizzazione intermedia dell'immagine. imagemagick.org/script/command-line-options.php#density
CreationTribe

7
Utilizzare convert -background none icon.svg -define icon:auto-resize icon.icoper mantenere lo sfondo trasparente.
Robert Hume,

2
magick convert -background none icon.svg -define icon:auto-resize icon.icoha funzionato per me.
intotecho

15

Una soluzione da riga di comando:

1) Esporta il tuo SVG in PNG con InkScape

2) Ridimensiona questa immagine PNG alle dimensioni desiderate con ImageMagick:

magick convert master.png -resize 16x16 16.png
magick convert master.png -resize 32x32 32.png
magick convert master.png -resize 48x48 48.png

3) Convertire le immagini PNG in ICO:

magick convert 16.png 32.png 48.png icon.ico

4) Assicurati che il tuo ICO contenga tutto:

identify icon.ico
icon.ico[1] ICO 16x16 16x16+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 32x32 32x32+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000
icon.ico[0] ICO 48x48 48x48+0+0 32-bit sRGB 21.2KB 0.000u 0:00.000

È inoltre possibile utilizzare un semplice batch o file shell per semplificare il lavoro.
Paolo Gibellini,

3
Non sarebbe meglio (anche se un po 'più complicato) esportare le molte dimensioni di png direttamente da SVG invece di ridimensionare PNG già rasterizzati?
Heltonbiker,

1
Nel caso in cui qualcun altro sia curioso, il "..." non è letterale. Rappresenta altre dimensioni di file png da stipare nel file favicon.ico.
Nostalg.io

@ Nostalg.io Buona osservazione, grazie! Ho modificato la risposta.
philippe_b

5

Versione Bash ...

#!/bin/bash

set -ex

svg=$1

size=(16 32 24 48 72 96 144 152 192 196)

echo Making bitmaps from your svg...

for i in ${size[@]}; do
  inkscape $svg --export-png="favicon-$i.png" -w$i -h$i --without-gui
done

echo Compressing...

## Replace with your favorite (e.g. pngquant)
# optipng -o7 favicon-*.png
pngquant -f --ext .png favicon-*.png --posterize 4 --speed 1

echo Converting to favicon.ico...

convert $(ls -v favicon-*.png) favicon.ico

## Clean-up maybe?
# rm favicon-*.png

echo Done

Uso: ./favicon.sh your-square-svg-file.svg

Richiede: inkscape imagemagick optipng (opzionale) dal gestore pacchetti.

Ho trovato più facile ricreare questo per la shell bash poiché Win10 e Inkscape non andavano d'accordo. Questo è stato testato all'interno del sottosistema Windows per Linux, ma dovrebbe funzionare anche su Mac.

Ho usato questo riferimento per scegliere le dimensioni che mi interessavano: https://github.com/audreyr/favicon-cheat-sheet . Adatta l' sizearray alle tue esigenze specifiche.


4

Suggerirei questo approccio:

1) creare uno script per esportare SVG in qualsiasi dimensione richiesta. Ho codificato questo script .bat per aiutarmi a creare un'icona Android

@echo off
set file="%~f1"
set path=%~dp1
set inkscape="C:\Program Files\Inkscape\inkscape.exe"

echo Le icone saranno salvate in %path%
echo Produzione icone applicative

echo %file% --export-png="%path%/ic32.png" -w32 -h32 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic48.png" -w48 -h48 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic72.png" -w72 -h72 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic96.png" -w96 -h96 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic144.png" -w144 -h144 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic192.png" -w192 -h192 > %~dp1/commands.txt
echo %file% --export-png="%path%/ic512.png" -w512 -h512 > %~dp1/commands.txt
%inkscape% --shell < %~dp1/commands.txt
erase "%~dp1/commands.txt"

echo Procedura terminata

NOTA :

  • % inkscape% var definito deve essere adeguato al percorso di installazione di Inkscape
  • lo script fa eco a tutti i comandi di esportazione in un file temporaneo per una migliore gestione del processo inkscape. Il parametro "shell" cli accetta più comandi usando una singola istanza invece di generare un'istanza per comando.

Con questo parametro, Inkscape entrerà in una modalità shell della riga di comando interattiva. In questa modalità, digiti i comandi al prompt e Inkscape li esegue, senza che tu debba eseguire una nuova copia di Inkscape per ciascun comando. Questa funzione è utile soprattutto per gli script e gli usi del server: non aggiunge nuove funzionalità ma consente di migliorare la velocità e i requisiti di memoria di qualsiasi script che chiama ripetutamente Inkscape per eseguire attività da riga di comando (come esportazione o conversioni). Ogni comando in modalità shell deve essere una riga di comando Inkscape valida completa ma senza il nome del programma Inkscape, ad esempio "file.svg --export-pdf = file.pdf". ( vedi il manuale di inkscape )

2) Aggiungi allo script sopra la sintassi di conversione dichiarata nella risposta philippe-b che unisce tutti i PNG generati in un singolo file ICO

3) Opzionalmente, rimuovere tutti i PNG esportati in quanto non sono più necessari


1

Questo sito Web è la mia meta per la generazione di favicon in quanto include le icone per Aggiungi alla schermata iniziale per la maggior parte dei dispositivi (Windows, macOS, Android, iOS) https://realfavicongenerator.net/

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.