Trong Inkscape, thay đổi kích thước cả tài liệu và nội dung của nó cùng một lúc


25

Tôi đã vật lộn để làm một cái gì đó có vẻ khá cơ bản:

Trong Inkscape, làm cách nào tôi có thể thay đổi kích thước tài liệu và nội dung của nó (tức là bản vẽ) cùng một lúc?

Một chút bối cảnh: Tôi muốn thay đổi kích thước một số lượng khá lớn các tài liệu SVG từ Dự án Danh từ (chúng thường là các tài liệu 100x100px) mà không phải thay đổi kích thước các bản vẽ thực tế.

NB: Nếu có một giải pháp dòng lệnh, tôi cũng có thể làm việc với nó!


Tôi không chắc chắn về mục tiêu cuối cùng của bạn, nhưng AFAIK, khu vực tài liệu có phần tùy ý ngoài việc in, nơi bạn có tùy chọn chỉ in khu vực tài liệu. Tuy nhiên, bạn cũng chỉ có thể in khu vực đối tượng, vì vậy đó có thể là một cách để vượt qua rào cản của bạn.
DA01

@ DA01 Chà, tôi nghĩ rằng tài liệu này khá hữu ích khi bạn xuất sang Bitmap (đó là những gì tôi đang làm).
julien_c

Nhân tiện, có cách nào để thay đổi kích thước một đối tượng không liên quan đến việc kéo các góc, nhưng nơi bạn sẽ chỉ định rõ ràng một kích thước? Đó có thể là điều tôi sau :)
julien_c

1
thậm chí sau đó nó là một lựa chọn tùy ý. Bạn có thể dễ dàng vẽ một hộp chứa như 'vùng' xuất khẩu của mình. Trong thực tế, đó là cách tôi thường thích làm điều đó. Đối với thay đổi kích thước, bạn có thể chọn các đối tượng của mình và sau đó a) sử dụng thanh trạng thái ở trên cùng và nhập thay đổi kích thước của bạn hoặc b) đi tới ĐỐI TƯỢNG> CHUYỂN ĐỔI và nhập các giá trị trong Pallet chuyển đổi
DA01

@julien_c: Tôi nghĩ vấn đề ở đây là các đối tượng là nghệ thuật véc tơ thẳng và không có kích thước mỗi se cho đến khi bạn xuất chúng ra một thiết bị raster (hoặc tệp). Kích thước của chúng (inch, pixel, hình khối), thực tế, không liên quan.
horatio

Câu trả lời:


24

Bạn chưa đề cập đến hệ điều hành nào bạn đang chạy. Tôi đang sử dụng Ubuntu và tôi đã có thể sử dụng librsvg2 thành công.

Nếu bạn có quyền truy cập vào Ubuntu, đây là những gì bạn có thể làm. Đầu tiên, cài đặt librsvg2:

sudo apt-get install librsvg2-bin

Sau đó, cdđến thư mục có SVG của bạn (đảm bảo rằng nó chỉ có SVG!) Và sử dụng một lệnh như sau:

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/new.svg/')"
    rsvg-convert "$old" -w 160 -h 160 -f svg -o "$new"
done

Điều này sẽ tạo ra một loạt các SVG mới với kích thước 200px x 200px và được lưu dưới dạng "tệp gốc-name.new.svg"

Tính kích thước có phần khó hiểu. Để chuyển đổi SVG sang SVG, bạn cần làm một chút toán học. Các tùy chọn "chiều cao" và "chiều rộng" trong rsvg-convert sử dụng pt, không phải px, trong các trường hợp như vậy, vì vậy hãy sử dụng 80 nếu bạn muốn 100px, 120 nếu bạn muốn 150px, v.v.

Bạn cũng có thể sử dụng rsvg-convert để đầu ra PNG. Nó tốt hơn nhiều trong việc rasterizing tệp so với ImageMagick, ít nhất là theo kinh nghiệm của tôi. Lưu ý rằng bạn cần thay đổi -fthành png, bạn cần thay đổi mẫu lưu đầu ra từ 's/svg$/new.svg/'thành 's/svg$/png/'và bạn nhập chiều rộng và chiều cao mà bạn muốn làm giá trị pixel.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done

Nhân tiện, tôi chỉ giả sử rằng bạn cần thực hiện việc này trong chế độ hàng loạt với số lượng lớn SVG. Nếu không, bạn vẫn có thể sử dụng rsvg-convertnhư vậy: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgsẽ lấy một tệp nguồn có tên là "noun_project_1576" và nghiêng nó thành 400px x 200px và đổi tên thành "noun_project_1576-skewed".
Ananda Mahto

@julien_c, chỉ cần theo dõi: bạn đã thử đề xuất này và có bất kỳ may mắn với nó?
Ananda Mahto

Sao chép và dán mã trong thiết bị đầu cuối nhưng trả về sed: -e biểu thức # 1, char 14: lệnh unterminted 's' Thiếu đối số cho -o ... Mọi đề xuất
raphie

Tôi đã thay đổi `thành" và bây giờ tôi đang gặp lỗi khi lưu vào tệp: echo svgfile.svg | sed -e 's / svg $ / 2.svg'
raphie

Tuyệt vời - sẽ còn tuyệt vời hơn nữa khi librsvglỗi văn bản bị lỗi được sửa chữa ...
Joce

7

Hiện tại không có cách riêng để làm điều đó trong Inkscape. Cách duy nhất là thay đổi kích thước nội dung và tài liệu riêng biệt.


2

Trong khi có một vài cách để làm điều đó - như đã lưu ý ở đây - một cách có thể hoạt động thực sự tốt là sử dụng a viewBox. Bạn chỉ cần sửa đổi nội dung của thẻ SVG như vậy:

<svg
 width="1280"
 height="800"
 viewBox="0 0 1280 800">
    <!-- More markup... --!>
</svg>

viewBoxlàm gì định nghĩa một hệ tọa độ nội bộ cho tài liệu. Sau đó, bạn có thể dễ dàng chia tỷ lệ tài liệu đơn giản bằng cách sửa đổi widthheightcác thuộc tính khi cần thiết.

Lưu ý rằng có một số nhược điểm, mặc dù. Đối với một điều, chỉ có một số bối cảnh nhất định, điều này hoạt động cụ thể nếu bạn bằng cách nào đó trực tiếp bao gồm tài liệu SVG trên trang đánh dấu của bạn. Sử dụng một <img>thẻ với điều này có thể hoặc không thể mang lại kết quả bất ngờ. Bạn sẽ phải thực hiện một số nghiên cứu của riêng bạn để tìm ra cách tốt nhất để làm điều này.


2
Điều này không làm việc cho tôi và tôi không hiểu tại sao. Nếu tôi chỉnh sửa chiều rộng và chiều cao nhưng để nguyên viewBox như sau: Khi Chrome hiển thị tệp svg thô, nó chỉ hiển thị một phần nhỏ nội dung. Khi Inkscape hiển thị nó, nó hiển thị toàn bộ nội dung, nhưng nó lớn hơn nhiều so với trang, đó là phần nhỏ (trên cùng bên trái) mà Chrome đã hiển thị. Vì vậy, hoàn toàn: nội dung không được chia tỷ lệ theo tọa độ khung nhìn. SVG của tôi có một số phần tử svg con trong đó, nhưng tất cả chúng đều được chuyển đổi dựa trên (tôi giả sử) tọa độ hộp xem.
CPBL

Làm việc cho tôi trong Inkscape 0.92.3, Firefox 66 và Chromium 73.
Socowi
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.