Bagaimana cara memasukkan gambar svg ke kanvas mereka di baris perintah?

13

Memotong .svgfile pada baris perintah itu sederhana: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Saya perlu melakukan yang sebaliknya. Saya ingin memasukkan gambar ke 64 x 64kanvas poin (sudah diatur dalam semua .svgfile). Sayangnya Inkscape tidak memberikan FitDrawingToCanvasperintah. Selain itu, pemasangan harus menjaga aspek rasio gambar.

Jika itu penting: Saya menggunakan Ubuntu raring.

Stefan Endrullis
sumber
1
Apakah mengubah ukuran setelah pas kanvas untuk menggambar melakukan pekerjaan? Lihat graphicdesign.stackexchange.com/questions/6574/…
Takkat
Dua pertanyaan: (1) ukuran kanvas sudah diatur di setiap contoh, tetapi gambar lebih besar dari kanvas; atau apakah Anda memasukkan gambar svg ke dokumen svg yang berbeda?; (2) "menjaga aspek rasio": ini membingungkan mengingat kanvas persegi 64pt yang disebutkan dalam pertanyaan Anda, tetapi apakah Anda memiliki proses pengambilan keputusan otomatis yang diusulkan untuk bagaimana menangani bahan yang tidak persegi? misalnya ketinggiannya harus 64pt dalam semua kasus ...
horatio
@ Takkat: Terima kasih atas petunjuknya. Alur kerjanya bekerja, tetapi rasio aspek hancur. Akan mencari solusi untuk itu ...
Stefan Endrullis
@horatio: (1) gambar lebih kecil dari kanvas dan ya, keduanya berada di file yang sama. (2) Saya ingin skala gambar ke titik yang max (drawingWidth, drawingHeight) = 64pt.
Stefan Endrullis
@Takkat: rsvg-convert memiliki argumen --keep-aspect-ratio :)
Stefan Endrullis

Jawaban:

2

Saya menemukan cara untuk melakukan ini dalam pertanyaan ini: Inkscape - Gambar Pusat ke Halaman melalui Command Line / Terminal

Dengan "foo.svg" sebagai gambar untuk diedit:

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

Untuk mengedit semua gambar svg di direktori saat ini:

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

Tetapi perintah kedua ini membuka banyak jendela, yang akan membuat komputer Anda crash jika Anda mengedit terlalu banyak gambar. Hanya untuk Linux , perintah ini akan bekerja lebih baik:

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

Untuk perintah di atas, jika ada file symlink, Inkscape akan mengedit file target yang ditunjuk symlink. Jika Anda tidak ingin Inkscape melakukan ini, Anda dapat memfilter symlink dengan perintah ini:

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


Sementara saya melakukannya, saya mungkin juga memposting skrip bash yang saya buat untuk ini:

#!/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

Saya memanggilnya inkscape-centerdan menjalankannya seperti ini:

inkscape-center <file-or-directory>

Dibutuhkan argumen sebanyak yang Anda inginkan, sehingga Anda dapat melakukan sesuatu seperti ini:

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

Hati-hati - Jika Anda menentukan direktori alih-alih file, itu akan mengedit setiap file svg di direktori itu.

GreenRaccoon23
sumber
1

Anda bisa menggunakan viewBox untuk mencapai apa yang Anda inginkan. Saya tidak tahu apakah ada cara untuk melakukan ini dari dalam Inkscape, tetapi karena SVG adalah format standar dan mungkin ada alat lain yang akan melakukan pekerjaan yang Anda inginkan. Pencarian cepat untuk "svg command line tools" mengungkapkan beberapa hasil menarik, termasuk yang ini untuk membuat ikon CSS.

Pilihan kedua adalah menulis alat Anda sendiri dalam bahasa pilihan Anda untuk melakukan ini. Inti dasarnya adalah mengatur viewBox sesuai ketinggian dokumen Anda, lalu atur lebar dan tinggi dokumen yang diinginkan. Terakhir, atur atribut preserveAspectRatio.

Berikut ini modifikasi yang dijelaskan di atas pada dokumen yang awalnya 744x1052.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
BrianV
sumber