Converti in batch le immagini SVG nella dimensione desiderata PNG o ICO


26

Ho un sacco di icone SVG che vorrei usare per la mia applicazione da sviluppare in VB.Net 2010, e poiché non ha supporto per gestire le icone SVG, ho bisogno di convertire quelle icone in PNG o ICO, con preferito risoluzione di uscita. Ho trovato un tale strumento da riga di comando per Ubuntu chiamato rsvgconvert. Abbiamo qualche strumento simile anche per Windows ??

Risposte:


12

ImageMagick ha uno strumento da riga di comando disponibile per Linux e Windows (e altri). Lo strumento di conversione è convenientemente chiamato "converti". Ecco un po 'di documentazione d'uso .

Ed ecco dove puoi ottenere un programma di installazione di Windows .


Puoi ottenerlo anche tramite il sottosistema Windows per Linux (WSL), conapt install imagemagick
antonyh

(questo vale per Linux, può applicarsi a Windows) se si attiva -verbose su IM, sembrerebbe che IM stesso usi inkscape per creare un file eps intermedio. quindi suggerirei la risposta di @ zetah
Northern-Bradley

Ecco un piccolo convertitore basato su ImageMagick per Windows: fosshub.com/SVG2PNG.html È vecchio (dal 2014), ma funziona ancora e non devi leggere alcun documento.
giorni

20

ImageMagick non dovrebbe associarsi immediatamente a qualsiasi attività batch che coinvolga immagini. Soprattutto in questo caso in cui ImageMagick è una soluzione scadente per la conversione SVG.

Meglio provare Inkscape dalla riga di comando:

inkscape in.svg --export-png=out.png


8
Perché dici che inkscape è meglio di ImageMagick? Non sono in disaccordo (o non sono d'accordo), sono solo curioso di avere maggiori dettagli.
Sam,

Il motivo di essere imageMagick è adatto a gestire meglio png, jpg ecc. Mentre inkscape è più adatto a gestire immagini vettoriali (svg)
user93

1
Allo stato attuale, questo non risponde alla domanda sulla conversione batch , vero?
OR Mapper

Mentre la risposta funziona, su Windows InkScape insiste nel mostrare una schermata iniziale che attira l'attenzione con un ritardo, il che rende impossibile eseguirla in modalità batch in background.
Timwi,

@Timwi Questo non succede qui. Ricorda solo di usare l' -zopzione.
Svish,

5

La riga di comando non ha funzionato immediatamente, inoltre ho voluto convertire 100 file. Ecco come l'ho fatto funzionare con Windows 7:

  1. installa inkscape - non quello portatile!

  2. copia tutti i tuoi file svg in una cartella, ad esempio "C: \ svgs \" lì:

  3. si crea un convert.batfile con questa riga all'interno:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    

    (puntare alla cartella corretta dell'installazione):

  4. apri il CMD come admin! Per fare ciò, premi il tasto WIN, digita cmd, fai clic destro su "cmd.exe" e seleziona "Esegui come amministratore".

  5. vai su "C: \ svgs \" e digita convert.bat - Tutti i file svg verranno convertiti in PNG.

  6. Utilizzare Esplora risorse per cercare i file PNG convertiti. Sul mio PC erano nella cartella:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

Spero che sia d'aiuto.


Dato che la risoluzione per la riga di comando poteva essere impostata solo per quanto potevo vedere, ho finito per usare lo strumento InkscapeBatch . Lì ho potuto impostare il DPI per aumentare relativamente tutte le immagini.

È necessario specificare le impostazioni corrette o non funzionerà. Ecco cosa ho fatto:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Dopo aver premuto "Fine", è necessario premere il pulsante "Avvia batch converter ..." nella barra degli strumenti:

inserisci qui la descrizione dell'immagine


1
Probabilmente al tuo comando batch manca un altro %%A(come nome file di input). Inoltre, perché pensi che dovrebbe funzionare solo in modalità amministratore?
OR Mapper

Quindi, come è meglio che usare ImageMagick?
reinierpost,

Purtroppo, anche questo collegamento sembra essere morto. (agosto 2017)
Ideogram il

@Ideogram Ho trovato un altro fornitore del download. softsea.com/download/InkscapeBatch.html
Kai Noack

per specificare il dpi è necessario aggiungere questa opzione --export-dpi=100dove 100 è il valore di dpi
Xsmael


3

Per la conversione da SVG a PNG ho scoperto che cairosvg ( https://cairosvg.org/ ) funziona meglio di ImageMagick. Passaggi per l'installazione e l'esecuzione su tutti i file nella directory.

pip3 install cairosvg

Apri una shell python nella directory che contiene i tuoi file .svg ed esegui:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 

Ciò assicurerà anche di non sovrascrivere i file .svg originali, ma manterrà lo stesso nome. Puoi quindi spostare tutti i tuoi file .png in un'altra directory con:

$ mv *.png [new directory]

Questa risposta è l'unica che ha funzionato per il mio file SVG piuttosto grande, grazie !!!
Ben Sandeen,

1

Dopo aver lottato con questo per quasi 2 ore, ho optato per Inkscape. Dato che avevo bisogno di convertire in batch un sacco di file in diverse risoluzioni, ho creato uno script Powershell. Con 106 SVG il mio computer si è bloccato per circa 5 secondi, quindi fai attenzione quando lo usi.

# ENTER THE FULL PATH TO THE INKSCAPE EXECUTABLE
$inkscapeExe = "C:\Program Files\Inkscape\inkscape.exe"
# ENTER THE PATH TO THE FOLDER CONTAINING THE SVGs
$svgFolder = "C:\Images\SVG"
# ENTER THE DESIRED WIDTH
$width = 120
# ENTER THE DESIRED HEIGHT
$height = 120

$svgFiles = Get-ChildItem $svgFolder -Filter *.svg
foreach ($svgFile in $svgFiles)
{
    $inputParam  = $svgFile.FullName 
    $outputParam = "--export-png=" + $svgFile.FullName + "-" + $width + "x" + $height + ".png" 
    $widthParam  = "-w" + $width
    $heightParam = "-h" + $height

    & $inkscapeExe $inputParam $outputParam $widthParam $heightParam
}

Il mio si è bloccato per più di qualche secondo. L' &operatore avvia un nuovo processo e continua immediatamente, quindi questo script creerà tutti i nuovi processi inkscape.exe quanti sono i file svg. Si scopre che questo rende il computer abbastanza lento per un po '.
Rory,

Se metti | Out-Nullalla fine della riga che inizia con &questo, lo forzerai a eseguire il comando inkscape.exe uno alla volta, il che funziona molto meglio per me.
Rory,

1

Puoi usare quanto segue in Bash / Ubuntu per Windows, nella cartella in cui hai gli SVG. Sembra tuttavia che ImageMagick prima rasterizzi, quindi ridimensiona, il che si traduce in strani artefatti ...

find -name "*.svg" -exec convert {} -background none -density 300 -resize 256x256 -define icon:auto-resize -alpha remove -colors 256 {}.ico \;

Vedi anche qui la soluzione basata su Inscape che sembra funzionare bene (da un altro thread, collegamento perso): mkdir temp; declare -a res=(16 24 32 48 64 128 256); for f in *.svg; do for r in "${res[@]}"; do inkscape -z -e temp/${f}${r}.png -w $r -h $r $f; done; resm=( "${res[@]/#/temp/$f}" ); resm=( "${resm[@]/%/.png}" ); convert "${resm[@]}" ${f%%.*}.ico; done; rm -rf temp;


1
+1 L'ho usato con inkscape in una versione molto semplificata find -name "*.svg" -exec inkscape {} -e {}.png \;Anche se preferisco questa versione: ls | grep ".svg" | xargs -I file inkscape file -e file.pngperché i file vengono elaborati in ordine alfabetico - questo non è il caso, quando si usafind
loved.by.Jesus


0

Non sono riuscito a trovare un singolo comando che funzionasse per eseguire un batch, quindi l'ho fatto funzionare generando un elenco di file e creando una serie di comandi. Queste istruzioni dovrebbero funzionare per tutte le versioni di Windows. Tutte le istruzioni di battitura escludono le virgolette e includono tutto tra loro.

Per fare questo avrai bisogno di Inkscape, MS Excel o editor di fogli di calcolo comparabili e un generatore di elenchi. C'è un piccolo generatore di elenchi di freeware qui: https://www.portablefreeware.com/?id=1171

  • Hardlink, copia o sposta tutti i file svg in una cartella.
  • Generare un elenco di file di quella cartella ed esportare in CSV.
  • Apri il CSV in Excel ed elimina tutte le colonne tranne la colonna del nome del file. Elimina anche le intestazioni di colonna come [Percorso] e il testo di riepilogo in basso.
  • Se i nomi dei file non sono già nella seconda colonna, tagliali e incollali lì.
  • Nella prima cella della prima colonna digitare inkscape seguito da uno spazio e dal percorso della cartella in cui i file svg includono una barra rovesciata finale (ad esempio "inkscape C: \ SVG \"). Quindi copia questa cella, seleziona tutte le celle sottostanti che precedono il nome di un file e incollale in modo che abbiano tutte lo stesso testo.
  • Nella terza colonna digitare --export-png = nella prima cella seguita dalla cartella di destinazione in cui si desidera salvarli. Ho appena usato la stessa cartella. Affinché la sintassi sia corretta, assicurarsi di aggiungere uno spazio all'inizio, ma tenere insieme il resto del testo (ad es. "--Export-png = C: \ PNG \"). Copia e incolla questo per tutte le righe proprio come la prima colonna
  • Copia l'intera seconda colonna e incollala nella quarta colonna. Con quella quarta colonna selezionata, premi Ctrl + H (Trova e sostituisci). Nel campo Trova ".svg" Nel campo Sostituisci digitare ".png", quindi selezionare Sostituisci tutto.

Se lo hai fatto correttamente, dovresti avere una riga per ogni nome di file che assomiglia a questo: | inkscape C: \ SVG \ | Filename1.svg | --export-png = C: \ png \ | Filename1.png |

  • Nella prima cella della quinta colonna digitare "= concatenate (a2, b2, c2, d2)". Ciò presuppone che la colonna di intestazione non sia stata eliminata. I numeri di cella tra parentesi devono corrispondere al numero di riga corrente. Se il tuo primo nome file è in B2, la formula sopra è accurata. In caso contrario, i nomi di cella tra parentesi corrispondono alla riga del primo nome file (ad es. A1, b1, c1 ...)
  • Copia e incolla questa cella per riempire tutto sotto di essa proprio come le colonne 1 e 3.
  • Ora copia l'intera quinta colonna e usa Incolla speciale> Valori per incollare il testo prodotto dalle formule nella sesta colonna. Questa sesta colonna è il tuo colpo di denaro. Copia l'intera sesta colonna, Apri Blocco note e incolla l'ultima colonna in essa. Se lo hai fatto correttamente, avrai una riga di comando per convertire ciascuno dei tuoi file svg in pngs.
  • Salvare il file del Blocco note nella directory di Inkscape come file batch. Quando viene visualizzata la finestra Salva con nome, modifica il tipo Salva con nome in "Tutti i file" e salvalo come file .bat (ad es. "C: \ Programmi \ Inkscape \ SVGBatch.bat"
  • Tutto quello che resta da fare è andare in quella cartella e fare doppio clic sul file batch appena salvato. Dovrebbe aprire un prompt dei comandi e convertire tutti i file.

Spero che renda la vita di qualcuno più facile. Giacomo


0

La risposta di Kai è vicina, ma non ha funzionato per me. Tuttavia, con un paio di lievi modifiche, ha funzionato perfettamente la prima volta:

  1. Copia i tuoi SVG in una posizione comoda
  2. Crea un file di testo nella stessa cartella e rinominalo convert.bat
  3. Apri il convert.battuo editor di testo / codice preferito e inserisci quanto segue:

FOR %%A IN (*.svg) DO "C:\Program Files\Inkscape\inkscape.exe" %%A --export-png=%%A.png

(Nota che la inkscape.exeposizione dovrebbe corrispondere alla posizione del programma eseguibile sul tuo PC; e il secondo prima --export-pngè %%A- questo è il file SVG da convertire)

  1. Fare doppio clic convert.batper eseguire e dovrebbe echeggiare i risultati delle conversioni.

Si noti che potrebbe essere necessario aggiornare la cartella di Windows per visualizzare i nuovi file, ma dovrebbero essere stati tutti creati nella stessa posizione degli SVG originali.


0

Non riesco a far funzionare l'immagine per me o inkscape per qualche motivo. Ho solo 12 file da convertire e ho appena usato questo sito manualmente: http://svgtopng.com/ ha funzionato a meraviglia.


0

Ecco una soluzione basata su ImageMagick per convertire tutti i file svg in una determinata directory in file ico:

mogrify -format ico -density 1200 -background transparent -trim -resize 256x256 -gravity center -extent 256x256 -define icon:auto-resize *.svg

Spiegazione:

  • mogrify: Mi piace convert, ma ti consente di elaborare in batch più file.
  • -format ico: Il nostro formato di file di destinazione. Crea .icofile invece di sovrascrivere il file originale (come farebbe Mogrify per impostazione predefinita).
  • -density 1200: Dal momento che non possiamo specificare una dimensione di pixel di destinazione in cui ImageMagick dovrebbe rasterizzare l'SVG (prima rasterizzerebbe con una densità predefinita e quindi ridimensionerebbe), rasterizziamo l'SVG con una risoluzione follemente alta (1200 dpi), per garantire che l'immagine verrà ridimensionato a 256x256 anziché ridimensionato .
  • -background transparent: Lo sfondo verrà reso trasparente.
  • -trim: Rimuove il bordo esistente attorno all'immagine.
  • -resize 256x256: Ridimensiona l'immagine, assicurando che il lato più lungo abbia 256 px, mantenendo le proporzioni.
  • -gravity center -extent 256x256: Ingrandisci la tela, assicurandoti che anche il lato corto abbia 256 pixel. L'immagine esistente è allineata al centro. Ciò è necessario perché abbiamo bisogno di un'immagine quadrata come base per un file ICO.
  • -define icon:auto-resize: Include non solo l'immagine 256x256 ma anche tutte le risoluzioni ridimensionate consigliate (ad es. 32x32) nel file ICO.

0

La maggior parte delle risposte fornite qui ignora la parte della dimensione desiderata della domanda. Non ho potuto ottenere risultati soddisfacenti usando convert"upscaling" di un SVG. inkscapefa un lavoro migliore e preserva anche la trasparenza dello sfondo.

A seconda del caso d'uso, utilizzare una delle seguenti opzioni:

  1. esportazione al DPI specificato: inscape in.svg -d 300 -e out.png
  2. esporta alla larghezza specificata (mantenendo le proporzioni): inscape in.svg -w 800 -e output.png
  3. esportazione all'altezza specificata (mantenendo le proporzioni): inscape in.svg -h 600 -e output.png

Si noti che la specifica di larghezza e altezza non mantiene le proporzioni.

Per convertire più file contemporaneamente, regola quanto segue sul tuo caso d'uso (in basho compatibile):

for f in *.svg; do
  inkscape $f -d 300 -e ${f%.*}.png
done
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.