"Bake" une image SVG dans un PNG à une résolution donnée?

20

Je suis sous Linux et je voudrais prendre un fichier SVG et le cuire dans un fichier PNG à une résolution donnée (mise à l'échelle). Existe-t-il un moyen de le faire rapidement et efficacement à partir de la ligne de commande?

Je cherche quelque chose comme ça:

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

Existe-t-il un outil pour cela?

Naftuli Kay
la source

Réponses:

20

Utilisez la conversion d'ImageMagick :

convert -resize 128x128 input.svg output.png

Si la taille du canevas d'entrée est inférieure à la taille donnée, cela augmentera l'échelle de la sortie sans rééchantillonnage. Pour obtenir un résultat de meilleure qualité, ajoutez un -densityparamètre:

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

Les rasters ImageMagick vecteurs des images à leur résolution de canevas à une densité par défaut de 72 dpi.
Pour augmenter l'échelle avec un échantillonnage approprié, vous pouvez spécifier une valeur trop élevée, comme 500 dpi dans l'échantillon ci-dessus.

L'utilisation d'une densité de trame trop élevée peut être un problème de performances avec un canevas de grande taille. La densité de trame la plus basse et idéale est: raster_density = raster_size / original_size * original_density

Cette densité de trame idéale produira une image directement à la taille attendue (pas -resizenécessaire). Mais comme des approximations de nombres flottants peuvent se produire, une valeur légèrement supérieure et un redimensionnement sont recommandés pour un résultat parfait en pixels.

Vous pouvez obtenir la taille et la densité d'origine en utilisant les échappements en pourcentage d'ImageMagick :

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

Notez que ImageMagick ne gère pas les spécifications complètes de SVG. Si vous rencontrez des problèmes avec le rendu incorrect des formes, consultez ce fil sur la sélection du rendu ImageMagick SVG .

Mihai Rotaru
la source
Génial merci. J'ai trouvé rsvgpar moi-même la réponse ci-dessous, mais il est vraiment temps que je commence à utiliser ImageMagick.
Naftuli Kay
1
N'a pas fonctionné pour mon image svg. Au début, j'ai reçu convert: unable to read font (null) des erreurs «@ error / annotate.c / RenderFreetype / 1153.» que j'ai résolues par brew install gs, mais même lorsque la conversion s'est déroulée proprement, l'image résultante est une ordure.
Lloyd Dewolf
@LloydDewolf, vous pouvez d'abord essayer de nettoyer le svg .
Mihai Rotaru
J'ai dû ajouter -background transparent, sinon convertir utilise un fond blanc.
hgoebl
(cela s'applique à Linux, peut s'appliquer à Windows) si vous activez -verbose sur IM, il semblerait que IM utilise lui-même inkscape pour créer un fichier eps intermédiaire. par conséquent, je suggère d'utiliser inkscape directement avec: inkscape in.svg --export-png=out.png(exemple de superuser.com/a/493028/316154 )
northern-bradley
9

Les deux rsvget inkscapepeuvent:

$ 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

Et:

$ 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.
la source
J'avais des problèmes sans fin avec Imagemagick. Je ne savais pas que je pouvais utiliser directement rsvg (le binaire s'appelait rsvg-convert dans mon cas sur Mac Homebrew) et cela fonctionne de manière fantastique. Merci.
tremby
L'utilisation d'inkscape a contourné un problème que je rencontrais avec imagemagick - la conversion SVG -> PNG en utilisant imagemagick a rogné la zone de délimitation invisible pour l'image (utilisée pour préserver le centrage et les dimensions relatives) mais inkscape a bien fonctionné. Merci beaucoup!
cutculus