Làm thế nào để phù hợp với bản vẽ svg với khung vẽ của họ trên dòng lệnh?


13

Cắt .svgcác tập tin trên dòng lệnh rất đơn giản: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Tôi cần phải làm ngược lại. Tôi muốn điều chỉnh bản vẽ vào 64 x 64khung vẽ điểm (đã được đặt trong tất cả .svgcác tệp). Thật không may, Inkscape không cung cấp một FitDrawingToCanvaslệnh. Hơn nữa, sự phù hợp nên giữ tỷ lệ khung hình của bản vẽ.

Nếu có vấn đề: Tôi đang sử dụng Ubuntu raring.


1
Sẽ thay đổi kích thước sau khi lắp khung vẽ để vẽ thực hiện công việc? Xem graphicdesign.stackexchange.com/questions/6574/...
Takkat

Hai câu hỏi: (1) kích thước canvas đã được đặt trong mỗi trường hợp, nhưng các bản vẽ lớn hơn canvas; hoặc bạn đang chèn một bản vẽ svg vào một tài liệu svg khác?; (2) "giữ tỷ lệ khung hình": điều này gây nhầm lẫn trong khung hình vuông 64pt được đề cập trong câu hỏi của bạn, nhưng bạn có đề xuất quy trình quyết định tự động cho cách xử lý vật liệu không vuông không? ví dụ: chiều cao phải là 64pt trong mọi trường hợp ...
horatio

@Takkat: Cảm ơn vì gợi ý. Quy trình làm việc hoạt động, nhưng tỷ lệ khung hình bị phá hủy. Sẽ tìm kiếm một giải pháp cho điều đó ...
Stefan Endrullis

@horatio: (1) bản vẽ nhỏ hơn khung vẽ và có, cả hai đều nằm trong cùng một tệp. (2) Tôi muốn chia tỷ lệ bản vẽ đến điểm tối đa (drawWidth, drawHeight) = 64pt.
Stefan Endrullis

@Takkat: rsvg-convert có một đối số --keep-khía cạnh-tỷ lệ :)
Stefan Endrullis

Câu trả lời:


2

Tôi đã tìm thấy một cách để làm điều này trong câu hỏi này: Inkscape - Vẽ trung tâm đến trang thông qua dòng lệnh / thiết bị đầu cuối

Với "foo.svg" là hình ảnh cần chỉnh sửa:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg

Để chỉnh sửa tất cả các hình ảnh svg trong thư mục hiện tại:

inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg

Nhưng lệnh thứ hai này sẽ mở ra rất nhiều cửa sổ, điều này sẽ khiến máy tính của bạn gặp sự cố nếu bạn chỉnh sửa quá nhiều hình ảnh. Chỉ dành cho Linux , lệnh này sẽ hoạt động tốt hơn:

for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done

Đối với lệnh trên, nếu bất kỳ tệp nào là liên kết tượng trưng, ​​Inkscape sẽ chỉnh sửa tệp đích mà liên kết tượng trưng trỏ tới. Nếu bạn không muốn Inkscape làm điều này, bạn có thể lọc bất kỳ liên kết tượng trưng nào bằng lệnh này:

for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done


Trong khi tôi đang ở đó, tôi cũng có thể đăng kịch bản bash tôi đã làm cho việc này:

#!/bin/bash
# inkscape-center <file-or-directory>...

_analyse() {
    if [ -d "${1}" ] ; then
        _centerAll "${1}" ;
    else
        _center "${1}" ;
    fi
}

_centerAll() {
    cd "${1}" ;
    for img in $(ls "*.svg") ; do
        _filterSyms "${img}" ;
    done
}

_filterSyms() {
    if [[ $(readlink "${1}") == "" ]] ; then
        _center "${1}"
    fi
}

_center() {
    inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}

for arg ; do
    _analyse "${arg}" ;
done

Tôi gọi nó inkscape-centervà chạy nó như thế này:

inkscape-center <file-or-directory>

Phải mất nhiều đối số như bạn muốn, vì vậy bạn có thể làm một cái gì đó như thế này:

inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg

Hãy cẩn thận - Nếu bạn chỉ định một thư mục thay vì một tệp, nó sẽ chỉnh sửa mọi tệp svg trong thư mục đó.


1

Bạn có thể sử dụng viewBox để thực hiện những gì bạn muốn. Tôi không biết có cách nào để thực hiện việc này từ trong Inkscape không, nhưng vì SVG là định dạng chuẩn và có thể có một công cụ khác sẽ thực hiện công việc bạn muốn. Một tìm kiếm nhanh cho "công cụ dòng lệnh svg" đã tiết lộ một số kết quả thú vị, bao gồm cả kết quả này để tạo biểu tượng CSS.

Một lựa chọn thứ hai sẽ là viết công cụ của riêng bạn bằng ngôn ngữ bạn chọn để làm điều này. Ý chính cơ bản là đặt viewBox theo chiều cao của tài liệu của bạn, sau đó đặt chiều rộng và chiều cao của tài liệu bạn muốn. Cuối cùng, thiết lập thuộc tính reservedAspectRatio.

Đây là những sửa đổi được mô tả ở trên trông giống như trên một tài liệu ban đầu là 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
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.