2011-09-16 3 views
21

Ho un'immagine logo in formato SVG e mi chiedo se esiste un modo per generare più file di dimensioni diverse png.Converti file SVG in file PNG di dimensioni diverse

Ad esempio, ho impostato 20 larghezza e altezza diverse e generato 20 file PNG. Va bene se devo farlo 5 immagini alla volta.

Ho installato un illustratore e non riesco a capire come farlo.

Grazie per tutto il vostro aiuto!

risposta

12

Non so su Illustrator, ma questo dovrebbe essere facile usando lo Inkscape command line options. Ad esempio, utilizzando Rubino:

$ ruby -e '[10,100,200].each { |x| `inkscape --export-png logo#{x}.png -w #{x} logo.svg` }' 
+0

Sì, funzionerebbe, ho scoperto che non c'era modo di farlo con Illustrator che mi delude, quindi ho dovuto farlo manualmente. – Mohammad

+4

Che mi fa impazzire ... Usando la linea di cmd rubino per chiamare un programma di linea cmd 3 volte ... Esiste un nome per quella follia? –

2

Date un'occhiata a inkmake. In realtà ho creato questo strumento solo per esportare in batch file SVG in PNG, ecc. In diverse dimensioni. È stato progettato perché volevo salvare in Inkscape e quindi eseguire semplicemente inkmake in un terminale ed esporterà tutti i file PNG dipendenti.

28

La risposta accettata va bene. C'è uno official help on options disponibile. comandi Shell di base Inoltre farà bene qui:

for x in 10 100 200 ; do inkscape --export-png logo${x}.png -w ${x} logo.svg ; done 

Sulla riga di comando in Windows Utilizzare questa linea da @avalancha nei commenti

for %x in (100 200 300) ; do inkscape --export-png logo%x.png -w %x logo.svg ; done 
+2

Per le persone che hanno bisogno solo di convertire un file, ecco una copia più facile: 'inkscape --export-png icon.png -w 128 logo.svg' – k0pernikus

+1

Per le persone sulla riga di comando in windows usa questo' per% x in (100 200 300); do inkscape --export-png logo% x.png -w% x logo.svg; done' – avalancha

+0

@avalancha lo adoro, il tuo dovrebbe essere una risposta nel suo vero e proprio – Alveoli

14

Ecco come rendere molto più veloce (3x per me per solo 5 le esportazioni su uno SSD) per il lancio di Inkscape solo una volta, e come esportare le immagini in diverse directory (come utilizza Android):

#!/bin/sh 
# Converts the Inkscape icon file ic_launcher_web.svg to the launcher web & app png files. 

PROJECT="My Project Name" 
INPUT="source-assets/ic_launcher_web.svg" 
MAIN="${PROJECT}/src/main/" 
RES="${MAIN}res/" 
DRAWABLE="${RES}/drawable" 

inkscape --shell <<COMMANDS 
    --export-png "${MAIN}ic_launcher-web.png"   -w 512 "${INPUT}" 
    --export-png "${DRAWABLE}-mdpi/ic_launcher.png" -w 48 "${INPUT}" 
    --export-png "${DRAWABLE}-hdpi/ic_launcher.png" -w 72 "${INPUT}" 
    --export-png "${DRAWABLE}-xhdpi/ic_launcher.png" -w 96 "${INPUT}" 
    --export-png "${DRAWABLE}-xxhdpi/ic_launcher.png" -w 144 "${INPUT}" 
quit 
COMMANDS 

Questa è una sc shell bash Ript. Su Windows puoi eseguirlo in MINGW32 (ad esempio GitHub's Git Shell) o convertirlo in uno script di shell DOS di Windows. (Per uno script DOS, devi modificare i COMANDI "qui documento" in qualcosa che il DOS può gestire.Vedere heredoc for Windows batch? per tecniche come echo multiple righe di testo in un file temporaneo.)

+0

Dove scrivere questo comando: S Non capisco. – salih

+1

@salih Questo script è stato scritto per essere eseguito in una shell di tipo Unix come MINGW su Windows, o sulla shell Mac OSX o sulla shell di Linux. (Potrebbe essere modificato per l'esecuzione all'interno della shell DOS di Windows o PowerShell.) Salvare questo testo come un file di testo, ad esempio 'export.sh'. Esegui il comando 'chmod ug + x export.sh' per contrassegnare lo script come" eseguibile ". Quindi, ogni volta che vuoi esportare l'immagine SVG in più dimensioni, esegui lo script tramite './Export.sh' se si trova nella directory corrente, o semplicemente 'export.sh' se si trova sul tuo PATH. – Jerry101

+0

Grazie per la buona spiegazione – salih

2

Se non hai già, installare imagemagick. Su OSX, che richiede rsvg supporto specifico:

brew install imagemagick --with-librsvg 

È inoltre necessario Inkscape, altrimenti è possibile che le immagini vengono prodotte tutto nero (tranne che per le aree trasparenti).

brew install homebrew/gui/inkscape 

Poi, si dovrebbe essere in grado di convertire come segue:

convert -density 1536 -background none -resize 100x100 input.svg output-100.png 

Il 1536 è una soluzione per qualcosa che non sono in grado di trovare buone risposte. Nei miei esperimenti, omettendo l'argomento -density si creano immagini che sono terribilmente piccole. La conversione di un'immagine in -size 100x100 a -density 1024 mi fornisce un'immagine di output di 96x96, quindi quello che sto facendo invece è il superamento della densità e il ridimensionamento fino alla dimensione di destinazione.

TL; DR utilizza una densità che è 1500 volte più grande della dimensione target e passa da lì.

Esistono molti modi per eseguire tale comando in blocco. Ecco uno nella shell:

for s in 10 100 200 ; do convert -density 1536 -background none -resize ${s}x${s} input.svg output-${s}.png ; done