"Bake" un'immagine SVG in un PNG a una determinata risoluzione?


20

Sono su Linux e vorrei prendere un file SVG e crearlo in un file PNG a una determinata risoluzione (ridimensionamento). C'è un modo per farlo in modo rapido ed efficace dalla riga di comando?

Sto cercando qualcosa del genere:

svg2png --width 128 --height 128 input.svg output.png

C'è uno strumento per questo?


Risposte:


20

Usa la conversione di ImageMagick :

convert -resize 128x128 input.svg output.png

Se la dimensione della tela di input è inferiore alla dimensione specificata, l'output verrà ingrandito senza ricampionare. Per ottenere un risultato di qualità superiore, aggiungi il -densityparametro:

convert -density 500 -resize 128x128 input.svg output.png

ImageMagick esegue il raster delle immagini vettoriali alla loro risoluzione di tela con una densità predefinita di 72 dpi.
Per eseguire l'upscaling con il campionamento corretto, è possibile specificare un valore troppo alto, come 500 dpi nel campione sopra.

L'uso di una densità raster troppo elevata può essere un problema di prestazioni con tele di grandi dimensioni. La densità raster più bassa e ideale è: raster_density = raster_size / original_size * original_density

Questa densità raster ideale produrrà l'immagine direttamente alla dimensione prevista (non -resizenecessaria). Tuttavia, poiché possono verificarsi approssimazioni in numeri float, si consiglia un valore leggermente più elevato e un ridimensionamento per un risultato pixel perfetto.

Puoi ottenere dimensioni e densità originali utilizzando le percentuali di escape di ImageMagick :

 convert input.svg -format "%w %h %[resolution.x] %[resolution.y]" info:

Si noti che ImageMagick non gestisce le specifiche complete di SVG. Se hai problemi con il rendering delle forme in modo errato, guarda questa discussione sulla selezione del renderer SVG di ImageMagick .


Fantastico, grazie. Ho trovato rsvgla risposta qui sotto da solo, ma è davvero ora che inizi a usare ImageMagick.
Naftuli Kay,

1
Non ha funzionato per la mia immagine svg. Inizialmente ho ricevuto convert: unable to read font (null) errori "@ error / annotate.c / RenderFreetype / 1153" che ho risolto brew install gs, ma anche quando la conversione è stata eseguita in modo pulito l'immagine risultante è spazzatura.
Lloyd Dewolf,

@LloydDewolf, puoi provare a pulire prima lo svg .
Mihai Rotaru,

Ho dovuto aggiungere -background transparent, altrimenti convertire utilizza lo sfondo bianco.
hgoebl,

(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 di utilizzare direttamente inkscape con: inkscape in.svg --export-png=out.png(esempio da superuser.com/a/493028/316154 )
Northern-Bradley

9

Entrambi rsvge inkscapepossono:

$ rsvg
Usage: rsvg [OPTIONS...] file.svg file.png
  -d, --dpi-x=<float>          pixels per inch
  -p, --dpi-y=<float>          pixels per inch
  -x, --x-zoom=<float>         x zoom factor
  -y, --y-zoom=<float>         y zoom factor
  -w, --width=<int>            width
  -h, --height=<int>           height
  -q, --quality=<int>          JPEG quality
  -f, --format=[png, jpeg]     save format
  -v, --version                show version information

Help options:
  -?, --help                   Show this help message
  --usage                      Display brief usage message

E:

$ inkscape --help
Usage: inkscape [OPTIONS...] [FILE...]

Available options:
  -V, --version                             Print the Inkscape version number
  -z, --without-gui                         Do not use X server (only process
                                            files from console)
  -g, --with-gui                            Try to use X server (even if
                                            $DISPLAY is not set)
  -f, --file=FILENAME                       Open specified document(s) (option
                                            string may be excluded)
  -p, --print=FILENAME                      Print document(s) to specified
                                            output file (use '| program' for
                                            pipe)
  -e, --export-png=FILENAME                 Export document to a PNG file
  -d, --export-dpi=DPI                      The resolution used for exporting
                                            SVG into bitmap (default 90)
  -a, --export-area=x0:y0:x1:y1             Exported area in SVG user units
                                            (default is the canvas; 0,0 is
                                            lower-left corner)
  -D, --export-area-drawing                 Exported area is the entire
                                            drawing (not canvas)
  -C, --export-area-canvas                  Exported area is the entire canvas
      --export-area-snap                    Snap the bitmap export area
                                            outwards to the nearest integer
                                            values (in SVG user units)
  -w, --export-width=WIDTH                  The width of exported bitmap in
                                            pixels (overrides export-dpi)
  -h, --export-height=HEIGHT                The height of exported bitmap in
                                            pixels (overrides export-dpi)
  -i, --export-id=ID                        The ID of the object to export
  -j, --export-id-only                      Export just the object with
                                            export-id, hide all others (only
                                            with export-id)
  -t, --export-use-hints                    Use stored filename and DPI hints
                                            when exporting (only with
                                            export-id)
  -b, --export-background=COLOR             Background color of exported
                                            bitmap (any SVG-supported color
                                            string)
  -y, --export-background-opacity=VALUE     Background opacity of exported
                                            bitmap (either 0.0 to 1.0, or 1 to
                                            255)
  -l, --export-plain-svg=FILENAME           Export document to plain SVG file
                                            (no sodipodi or inkscape
                                            namespaces)
  -P, --export-ps=FILENAME                  Export document to a PS file
  -E, --export-eps=FILENAME                 Export document to an EPS file
  -A, --export-pdf=FILENAME                 Export document to a PDF file
  -T, --export-text-to-path                 Convert text object to paths on
                                            export (EPS)
  -F, --export-embed-fonts                  Embed fonts on export (Type 1
                                            only) (EPS)
  -B, --export-bbox-page                    Export files with the bounding box
                                            set to the page size (EPS)
  -X, --query-x                             Query the X coordinate of the
                                            drawing or, if specified, of the
                                            object with --query-id
  -Y, --query-y                             Query the Y coordinate of the
                                            drawing or, if specified, of the
                                            object with --query-id
  -W, --query-width                         Query the width of the drawing or,
                                            if specified, of the object with
                                            --query-id
  -H, --query-height                        Query the height of the drawing
                                            or, if specified, of the object
                                            with --query-id
  -S, --query-all                           List id,x,y,w,h for all objects
  -I, --query-id=ID                         The ID of the object whose
                                            dimensions are queried
  -x, --extension-directory                 Print out the extension directory
                                            and exit
      --vacuum-defs                         Remove unused definitions from the
                                            defs section(s) of the document
      --verb-list                           List the IDs of all the verbs in
                                            Inkscape
      --verb=VERB-ID                        Verb to call when Inkscape opens.
      --select=OBJECT-ID                    Object ID to select when Inkscape
                                            opens.

Help options:
  -?, --help                                Show this help message
      --usage                               Display brief usage message

Ho avuto infiniti problemi con Imagemagick. Non avevo idea di poter usare direttamente rsvg (binary era chiamato rsvg-convert nel mio caso su Mac Homebrew) e questo funziona in modo fantastico. Grazie.
tremby,

L'uso di inkscape ha aggirato un problema che stavo riscontrando con imagemagick - la conversione in formato SVG -> PNG con imagemagick ha ritagliato il riquadro di delimitazione invisibile per l'immagine (usato per preservare il centraggio e le dimensioni relative) ma inkscape ha funzionato bene. Grazie molto!
cutculus,
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.