"Assar" uma imagem SVG em um PNG em uma determinada resolução?

20

Estou no Linux e gostaria de pegar um arquivo SVG e transformá-lo em um arquivo PNG em uma determinada resolução (dimensionamento). Existe uma maneira de fazer isso de maneira rápida e eficaz a partir da linha de comando?

Estou procurando algo parecido com isto:

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

Existe uma ferramenta para isso?

Naftuli Kay
fonte

Respostas:

20

Use o conversor do ImageMagick :

convert -resize 128x128 input.svg output.png

Se o tamanho da tela de entrada for menor que o tamanho especificado, isso aumentará a escala da saída sem nova amostragem. Para obter um resultado de qualidade superior, adicione o -densityparâmetro:

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

As imagens do Rastreio do ImageMagick vectoriam imagens para sua resolução de tela com uma densidade padrão de 72 dpi.
Para aumentar a escala com a amostragem adequada, você pode especificar um valor acima do normal, como 500 dpi na amostra acima.

Usar uma densidade de varredura muito alta pode ser um problema de desempenho em telas de tamanho grande. A densidade raster mais baixa e ideal é: raster_density = raster_size / original_size * original_density

Essa densidade raster ideal produzirá a imagem diretamente no tamanho esperado (não é -resizenecessário). Porém, como podem ocorrer aproximações do número flutuante, um valor ligeiramente mais alto e um redimensionamento são recomendados para obter resultados perfeitos em pixels.

Você pode obter o tamanho e a densidade originais usando as porcentagens de escape do ImageMagick :

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

Observe que o ImageMagick não lida com as especificações completas do SVG. Se tiver problemas com as formas renderizadas incorretamente, consulte este tópico sobre a seleção do renderizador ImageMagick SVG .

Mihai Rotaru
fonte
Incrível, obrigado. Encontrei rsvga resposta abaixo por conta própria, mas é hora de começar a usar o ImageMagick.
Naftuli Kay
1
Não funcionou para minha imagem svg. No começo, recebi convert: unable to read font os erros (nulo) '@ error / annotate.c / RenderFreetype / 1153`` pelos quais eu resolvi brew install gs, mas mesmo quando o convert era executado de forma limpa, a imagem resultante era lixo.
Lloyd Dewolf 27/02
@LloydDewolf, você pode tentar limpar o svg primeiro.
Mihai Rotaru 27/02
Eu tive que adicionar -background transparent, caso contrário, converter usa fundo branco.
hgoebl
(isso se aplica ao linux, pode ser aplicado ao windows) se você ativar o verbose no IM, parece que o próprio IM usa o inkscape para criar um arquivo eps intermediário. Portanto, eu sugiro usar o Inkscape diretamente com: inkscape in.svg --export-png=out.png(exemplo de superuser.com/a/493028/316154 )
Norte-Bradley
9

Ambos rsvge inkscapepodem:

$ 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
Dan D.
fonte
Eu estava tendo problemas sem fim com o Imagemagick. Não tinha idéia de que eu poderia usar o rsvg diretamente (o binário era chamado de rsvg-convert no meu caso no Mac Homebrew) e isso está funcionando de maneira fantástica. Obrigado.
tremby
O uso do inkscape contornou um problema que eu estava tendo com o imagemagick - a conversão SVG -> PNG usando o imagemagick cortou a caixa delimitadora invisível da imagem (usada para preservar as dimensões relativas e centralizadas), mas o inkscape funcionou bem. Muito Obrigado!
Cutculus