Ein SVG-Bild mit einer bestimmten Auflösung in ein PNG „backen“?

20

Ich bin unter Linux und möchte eine SVG-Datei mit einer bestimmten Auflösung (Skalierung) in eine PNG-Datei backen. Gibt es eine Möglichkeit, dies schnell und effektiv von der Befehlszeile aus zu tun?

Ich suche so etwas:

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

Gibt es ein Tool dafür?

Naftuli Kay
quelle

Antworten:

20

Verwenden Sie ImageMagicks Konvertierung :

convert -resize 128x128 input.svg output.png

Wenn die Größe des Eingabebereichs kleiner als die angegebene Größe ist, wird die Ausgabe ohne erneutes Abtasten vergrößert. Um ein Ergebnis mit höherer Qualität zu erhalten, fügen Sie folgende -densityParameter hinzu:

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

ImageMagick rastert Vektorbilder auf ihre Leinwandauflösung mit einer Standarddichte von 72 dpi.
Um eine korrekte Abtastung zu erzielen, können Sie einen zu hohen Wert wie 500 dpi im obigen Beispiel angeben.

Die Verwendung einer zu hohen Rasterdichte kann bei großen Zeichenflächen zu Performanceproblemen führen. Die niedrigste und ideale Rasterdichte ist: raster_density = raster_size / original_size * original_density

Diese ideale Rasterdichte gibt das Bild direkt in der erwarteten Größe aus (nicht -resizeerforderlich). Da jedoch möglicherweise Gleitkommazahlen angenähert werden, werden für ein pixelgenaues Ergebnis ein etwas höherer Wert und eine Größenänderung empfohlen.

Mit den Prozentzeichen von ImageMagick erhalten Sie Originalgröße und -dichte :

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

Beachten Sie, dass ImageMagick nicht alle SVG-Spezifikationen unterstützt. Wenn Sie Probleme mit falsch gerenderten Formen haben, lesen Sie diesen Thread zur Auswahl des ImageMagick SVG-Renderers .

Mihai Rotaru
quelle
Super, danke. Ich habe es rsvgaus der unten stehenden Antwort selbst herausgefunden, aber es ist wirklich an der Zeit, ImageMagick zu verwenden.
Naftuli Kay
1
Funktionierte nicht für mein SVG-Bild. Zuerst erhielt ich convert: unable to read font (null) "@ error / annotate.c / RenderFreetype / 1153." Fehler, die ich behoben habe brew install gs, aber selbst wenn die Konvertierung sauber lief, ist das resultierende Bild Müll.
Lloyd Dewolf,
@LloydDewolf, Sie können zuerst versuchen, das SVG zu säubern .
Mihai Rotaru
Ich musste hinzufügen -background transparent, sonst verwende convert weißen hintergrund.
hgoebl
(Dies gilt für Linux und möglicherweise für Windows.) Wenn Sie -verbose für Sofortnachrichten aktivieren, scheint es, als ob Sofortnachrichten selbst inkscape verwenden, um eine dazwischen liegende eps-Datei zu erstellen. Daher würde ich vorschlagen, Inkscape direkt mit: inkscape in.svg --export-png=out.png(Beispiel von Superuser / a
493028/316154
9

Beides rsvgund inkscapekönnen:

$ 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

Und:

$ 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
Dan D.
quelle
Ich hatte endlose Probleme mit Imagemagick. Ich hatte keine Ahnung, dass ich rsvg direkt verwenden könnte (Binärdatei hieß in meinem Fall rsvg-convert auf Mac Homebrew) und das funktioniert fantastisch. Vielen Dank.
Tremby
Die Verwendung von Inkscape verhinderte ein Problem mit Imagemagick - die SVG -> PNG-Konvertierung mit Imagemagick schnitt den unsichtbaren Begrenzungsrahmen für das Bild aus (zur Beibehaltung der Zentrierung und der relativen Abmessungen), aber Inkscape funktionierte einwandfrei. Danke vielmals!
Cutculus