Nướng Bake Hình ảnh SVG thành PNG ở độ phân giải nhất định?


20

Tôi đang dùng Linux và tôi muốn lấy một tệp SVG và nướng nó thành một tệp PNG ở độ phân giải nhất định (chia tỷ lệ). Có cách nào để làm điều này nhanh chóng và hiệu quả từ dòng lệnh?

Tôi đang tìm kiếm một cái gì đó như thế này:

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

Có một công cụ cho việc này?


Câu trả lời:


20

Sử dụng chuyển đổi của ImageMagick :

convert -resize 128x128 input.svg output.png

Nếu kích thước canvas đầu vào nhỏ hơn kích thước đã cho, điều này sẽ tăng quy mô đầu ra mà không cần lấy mẫu lại. Để có kết quả chất lượng cao hơn, hãy thêm -densitytham số:

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

ImageMagick raster hình ảnh vector đến độ phân giải canvas của chúng đến mật độ mặc định là 72 dpi.
Để mở rộng quy mô với lấy mẫu thích hợp, bạn có thể chỉ định giá trị cao hơn, như 500 dpi trong mẫu ở trên.

Sử dụng mật độ raster quá cao có thể là một vấn đề hiệu suất với vải kích thước lớn. Mật độ raster thấp nhất và lý tưởng là: raster_density = raster_size / original_size * original_density

Mật độ raster lý tưởng này sẽ xuất hình ảnh trực tiếp đến kích thước dự kiến ​​(không -resizecần thiết). Nhưng vì xấp xỉ số float có thể xảy ra, nên sử dụng giá trị cao hơn một chút và thay đổi kích thước cho kết quả hoàn hảo pixel.

Bạn có thể nhận được kích thước và mật độ ban đầu bằng cách sử dụng phần trăm thoát của ImageMagick :

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

Lưu ý rằng ImageMagick không xử lý các thông số kỹ thuật đầy đủ của SVG. Nếu gặp sự cố với hình dạng được hiển thị không chính xác, hãy xem chủ đề này về cách chọn trình kết xuất ImageMagick SVG .


Thật sự cảm ơn. Tôi đã tự mình tìm thấy rsvgcâu trả lời bên dưới, nhưng thực sự đã đến lúc tôi bắt đầu sử dụng ImageMagick.
Naftuli Kay

1
Không làm việc cho hình ảnh svg của tôi. Lúc đầu, tôi nhận được convert: unable to read font (null) '@ error / annotate.c / RenderFreetype / 1153.` lỗi mà tôi đã giải quyết brew install gs, nhưng ngay cả khi chuyển đổi chạy sạch, hình ảnh kết quả là rác.
Lloyd Dewolf 27/2/2015

@LloydDewolf, bạn có thể thử làm sạch Svg trước.
Mihai Rotaru

Tôi đã phải thêm -background transparent, nếu không chuyển đổi sử dụng nền trắng.
hgoebl

(điều này áp dụng cho linux, có thể áp dụng cho windows) nếu bạn bật -verbose trên IM thì có vẻ như chính IM sử dụng inkscape để tạo tệp eps trung gian. do đó tôi sẽ đề xuất sử dụng inkscape trực tiếp với: inkscape in.svg --export-png=out.png(ví dụ từ superuser.com/a/493028/316154 )
phía bắc-bradley

9

Cả hai rsvginkscapecó thể:

$ 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

Và:

$ 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

Tôi đã gặp vấn đề vô tận với Imagemagick. Không biết tôi có thể sử dụng rsvg trực tiếp (nhị phân được gọi là rsvg-convert trong trường hợp của tôi trên Mac Homebrew) và điều này đang hoạt động rất tuyệt vời. Cảm ơn.
run rẩy

Sử dụng inkscape đã khắc phục được một vấn đề tôi gặp phải với hình ảnh - chuyển đổi SVG -> PNG bằng cách sử dụng hình ảnh cắt xén hộp giới hạn vô hình cho hình ảnh (được sử dụng để bảo vệ kích thước trung tâm và kích thước tương đối) nhưng inkscape hoạt động ổn. Cảm ơn nhiều!
cutculus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.