“Panggang” gambar SVG menjadi PNG pada resolusi yang diberikan?

20

Saya menggunakan Linux dan saya ingin mengambil file SVG dan memanggangnya menjadi file PNG pada resolusi tertentu (penskalaan). Apakah ada cara untuk melakukan ini dengan cepat dan efektif dari baris perintah?

Saya mencari sesuatu seperti ini:

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

Apakah ada alat untuk ini?

Naftuli Kay
sumber

Jawaban:

20

Gunakan konversi ImageMagick :

convert -resize 128x128 input.svg output.png

Jika ukuran kanvas input kurang dari ukuran yang diberikan, ini akan meningkatkan skala output tanpa sampel ulang. Untuk mendapatkan hasil kualitas yang lebih tinggi, tambahkan -densityparameter:

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

ImageMagick raster gambar vektor ke resolusi kanvas mereka ke kepadatan standar 72 dpi.
Untuk meningkatkan skala dengan pengambilan sampel yang tepat, Anda dapat menentukan nilai lebih tinggi, seperti 500 dpi dalam sampel di atas.

Menggunakan kepadatan raster yang terlalu tinggi dapat menjadi masalah kinerja dengan kanvas ukuran besar. Kepadatan raster terendah dan ideal adalah: raster_density = raster_size / original_size * original_density

Kepadatan raster yang ideal ini akan menampilkan gambar langsung ke ukuran yang diharapkan (tidak -resizediperlukan). Tetapi karena perkiraan angka float dapat terjadi, nilai yang sedikit lebih tinggi dan perubahan ukuran direkomendasikan untuk hasil pixel-perfect.

Anda bisa mendapatkan ukuran dan kerapatan asli menggunakan ImageMagick's escape :

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

Perhatikan bahwa ImageMagick tidak menangani spesifikasi SVG yang lengkap. Jika mengalami masalah dengan bentuk yang diberikan secara salah, lihat utas ini tentang memilih ImageMagick SVG renderer .

Mihai Rotaru
sumber
Keren terima kasih. Saya menemukan rsvgdari jawaban di bawah ini sendiri, tetapi sudah saatnya saya mulai menggunakan ImageMagick.
Naftuli Kay
1
Tidak berfungsi untuk gambar svg saya. Pada awalnya saya menerima convert: unable to read font (null) '@ error / annotate.c / RenderFreetype / 1153.` yang saya selesaikan brew install gs, tetapi bahkan ketika konversi berjalan dengan bersih, gambar yang dihasilkan adalah sampah.
Lloyd Dewolf
@LloydDewolf, Anda dapat mencoba membersihkan svg terlebih dahulu.
Mihai Rotaru
Saya harus menambahkan -background transparent, jika tidak dikonversi menggunakan latar belakang putih.
hgoebl
(ini berlaku untuk linux, mungkin berlaku untuk windows) jika Anda mengaktifkan -verbose pada IM maka akan muncul bahwa IM itu sendiri menggunakan inkscape untuk membuat file eps menengah. Oleh karena itu saya akan menyarankan menggunakan inkscape langsung dengan: inkscape in.svg --export-png=out.png(contoh dari superuser.com/a/493028/316154 )
north-bradley
9

Keduanya rsvgdan inkscapedapat:

$ 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

Dan:

$ 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.
sumber
Saya mengalami masalah tanpa akhir dengan Imagemagick. Tidak tahu saya bisa menggunakan rsvg secara langsung (biner disebut rsvg-convert dalam kasus saya di Mac Homebrew) dan ini bekerja dengan fantastis. Terima kasih.
gemetar
Menggunakan inkscape menghindari masalah yang saya alami dengan imagemagick - SVG -> konversi PNG menggunakan imagemagick memangkas kotak pembatas yang tidak terlihat untuk gambar (digunakan untuk mempertahankan dimensi pemusatan dan relatif) tetapi inkscape bekerja dengan baik. Terimakasih banyak!
cutculus