Làm thế nào tôi có thể mở rộng một SVG thông qua dòng lệnh?


17

Một SVG có các thuộc tính này, xác định kích thước của nó:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

Tôi muốn chia tỷ lệ một SVG đã cho thành một 400ptbằng dòng lệnh mà không phá vỡ tỷ lệ khung hình. Điều này có nghĩa, ba giá trị trên phải được thay đổi chính xác tất cả các điểm trong mã svg sau. Tôi không muốn chỉ thay đổi kích thước vải, nhưng toàn bộ kích thước hình ảnh svg. Và tôi không muốn làm điều đó với GUI / bằng tay, nhưng tôi muốn làm điều đó với CLI.

Làm cách nào tôi có thể tự động chia tỷ lệ một SVG theo dòng lệnh đến một chiều rộng nhất định?

Lý do: Bản xem trước của Wikipedia trông tệ nếu hình ảnh quá nhỏ. Xem hình ảnh này là một ví dụ.

Làm thế nào tôi có thể thực hiện nhiệm vụ này với Inkscape-GUI

  1. Shift + Ctrl + M (Chuyển đổi)
  2. Tỷ lệ (kiểm tra "tỷ lệ tương ứng")
  3. Nhập chiều rộng
  4. Shift + Ctrl + D (Thuộc tính tài liệu)
  5. Trang phù hợp để lựa chọn

Bây giờ tôi muốn một cách CLI tự động để làm điều này.

Nhân tiện, inkscape đơn giản được áp dụng

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">

cho toàn bộ hình ảnh.


Bạn sử dụng hệ điều hành nào?
terdon

Ubuntu 10.04.4 LTS (Tôi sẽ cập nhật nó ...)
Martin Thoma

Tệp SVG chỉ là tệp văn bản. Bạn có thể chỉnh sửa các tập tin và thay đổi width, heightviewBoxgiá trị cho một cái gì đó giống như width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau

Tôi biết rằng chúng chỉ là tập tin văn bản. Nhưng nếu tôi chỉ chỉnh sửa các giá trị này, kích thước của hình ảnh sẽ không thay đổi. Chỉ thay đổi kích thước vải. Chỉnh sửa bằng tay không phải là một lựa chọn, tôi tuyên bố rõ ràng rằng tôi muốn thay đổi nó tự động.
Martin Thoma

Vâng, tôi biết bạn đã yêu cầu một cách tự động để làm điều đó, nhưng nghĩ rằng nếu bạn có thể tìm ra những gì cần thay đổi, thông minh văn bản, thì bạn có thể tự động hóa nó bằng bất kỳ một trong số các công cụ chỉnh sửa văn bản có sẵn (chẳng hạn như sedtrong câu trả lời của @ terdon). Một vấn đề bạn có thể gặp phải là các giá trị cần có thể khác với bất kỳ tệp .svg nào khác mà bạn muốn thực hiện tương tự.
martineau

Câu trả lời:


15

rsvg-converttừ librsvg2-bingói có thể thay đổi kích thước của Svg.

Xem câu trả lời này để được hướng dẫn đầy đủ.


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgđã làm việc. Nhưng rsvg-convert dường như làm nhiều hơn là chỉ thay đổi kích thước.
Martin Thoma

2
@moose, tuy nhiên, như đã lưu ý trong câu trả lời đó, rsvg-convert sử dụng điểm chứ không phải pixel. Nếu bạn may mắn, bạn chỉ có thể chia kích thước dự định của mình cho 1,25. Tuy nhiên, nếu bạn muốn một cái gì đó như 24px (19,2 điểm), bạn sẽ không gặp may, vì không sẵn sàng đặt một số nguyên là chiều rộng hoặc chiều cao (không chắc chắn nếu SVG cho phép điều này).
Matthew Flaschen

@MartinThoma Vâng, thực sự. Tệp đầu ra SVG có kích thước gấp đôi kích thước ban đầu. Tôi tự hỏi tại sao? Đọc rsvg-convert --helpkhông cung cấp bất kỳ manh mối.
Serge Stroobandt

1
rsvg convert dường như cũng chuyển đổi các đường dẫn được vuốt sang các đường dẫn được phác thảo. Bạn có thể không muốn điều này (tôi biết là tôi không)
xem xét

1
Công cụ này dường như chỉ kẹt các biến đổi thành từng thành phần và không thực sự thay đổi kích thước ban đầu.
rtaft

3

Nếu bạn chỉ muốn thay đổi một hình ảnh, hãy mở nó trong trình soạn thảo văn bản (ví dụ như emacs) và thay đổi mục nhập chiều rộng.

Đối với một người đam mê, CLI chỉ tiếp cận, sử dụng sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

Điều này sẽ không chia tỷ lệ hình ảnh mặc dù, chỉ đặt chiều rộng của nó.


Một cách tốt hơn, có lẽ, nhưng chắc chắn một cách có thể chạy trong chế độ hàng loạt cho nhiều hình ảnh là sử dụng inkscape từ dòng lệnh:

$ inkscape -z -e out.png -w 400 -h 400 in.svg

Đối với nhiều tệp (giả sử bạn muốn tất cả chúng có cùng chiều rộng), hãy làm như sau. Nó yêu cầu chuyển đổi sang png và giả sử không có khoảng trắng trong tên tệp của bạn:

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done

Chuyển đổi của ImageMagick là lựa chọn đầu tiên của tôi nhưng nó dường như bị hỏng khi nhân rộng các Svss.


7
Lệnh inkscape của bạn cho kết quả là PNG, nhưng tôi muốn có SVG. Lệnh svg của bạn không chỉ thay đổi kích thước canvas chứ không thay đổi kích thước của hình ảnh. Bạn không thể đơn giản sử dụng trình soạn thảo văn bản và chỉ thay đổi các giá trị tôi đã đề cập ở trên. Tôi nghĩ rằng tôi phải làm rõ câu hỏi.
Martin Thoma

bạn cũng cần thêm một thẻ: ... "> <g Transform =" scale (2) "> <path .... /> </ g> </ svg> để chia tỷ lệ hình ảnh có cùng hệ số.
Stofke 17/03/2017
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.