Di Inkscape, ubah ukuran dokumen dan kontennya secara bersamaan

25

Saya telah berjuang untuk melakukan sesuatu yang tampaknya cukup mendasar:

Di Inkscape, bagaimana saya bisa mengubah ukuran dokumen dan kontennya (yaitu gambar) secara bersamaan?

Sedikit konteks: Saya ingin mengubah ukuran sejumlah besar dokumen SVG dari The Noun Project (biasanya dokumen 100x100px) tanpa harus mengubah ukuran gambar yang sebenarnya secara eksplisit.

NB: Jika ada solusi baris perintah, saya juga bisa bekerja dengan itu!

julien_c
sumber
Saya tidak yakin dengan tujuan akhir Anda, tetapi AFAIK, area dokumen agak sewenang-wenang selain dari pencetakan, di mana Anda memiliki opsi untuk hanya mencetak area dokumen. Namun, Anda juga bisa hanya mencetak area objek juga, jadi itu mungkin cara untuk mengatasi rintangan Anda.
DA01
@ DA01 Yah, saya pikir dokumen ini cukup membantu ketika Anda mengekspor ke Bitmap (yang saya lakukan).
julien_c
Omong-omong, apakah ada cara untuk mengubah ukuran objek yang tidak melibatkan sudut seret, tetapi di mana Anda akan secara eksplisit menentukan ukuran? Itu mungkin hal yang saya cari :)
julien_c
1
bahkan itu adalah opsi yang sewenang-wenang. Anda dapat dengan mudah menggambar kotak berisi sebagai 'zona' ekspor Anda. Bahkan, begitulah biasanya saya lebih suka melakukannya. Sedangkan untuk mengubah ukuran, Anda dapat memilih objek Anda dan kemudian a) menggunakan bilah status di bagian atas dan ketik perubahan ukuran Anda atau b) pergi ke OBJECT> TRANSFORM dan masukkan nilai dalam palet Transform
DA01
@ julien_c: Saya pikir intinya di sini adalah bahwa objek adalah seni vektor lurus dan tidak memiliki ukuran per se sampai Anda output ke perangkat raster (atau file). Ukurannya (inci, piksel, hasta), pada dasarnya, tidak relevan.
horatio

Jawaban:

24

Anda belum menyebutkan OS apa yang Anda jalankan. Saya menggunakan Ubuntu, dan saya berhasil menggunakan librsvg2.

Jika Anda memiliki akses ke Ubuntu, inilah yang dapat Anda lakukan. Pertama, instal librsvg2:

sudo apt-get install librsvg2-bin

Kemudian, cdke direktori yang memiliki SVG Anda (pastikan hanya memiliki SVG!) Dan gunakan perintah seperti berikut:

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

Ini akan membuat batch SVG baru dengan dimensi 200px kali 200px, dan disimpan sebagai "original-file-name.new.svg"

Menghitung dimensi agak membingungkan. Untuk mengubah SVG ke SVG, Anda perlu melakukan sedikit matematika. Opsi "tinggi" dan "lebar" dalam rsvg-convert menggunakan pt, bukan px, dalam kasus seperti itu, jadi gunakan 80 jika Anda ingin 100px, 120 jika Anda ingin 150px, dan sebagainya.

Anda juga dapat menggunakan rsvg-convert ke PNG keluaran. Jauh lebih baik dalam meraster file daripada ImageMagick, setidaknya dalam pengalaman saya. Perhatikan bahwa Anda perlu perubahan -funtuk png, Anda perlu untuk mengubah output menyimpan pola dari 's/svg$/new.svg/'ke 's/svg$/png/', dan Anda masukkan lebar dan tinggi yang Anda inginkan sebagai nilai-nilai 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
Ananda Mahto
sumber
By the way, saya hanya berasumsi bahwa Anda perlu melakukan ini dalam mode batch ke sejumlah besar SVG. Jika tidak, Anda masih dapat menggunakan yang rsvg-convertseperti itu: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svgyang akan mengambil file sumber bernama "noun_project_1576" dan mengubahnya menjadi 400px kali 200px dan menamainya "noun_project_1576-skewed".
Ananda Mahto
@julien_c, baru saja menindaklanjuti: apakah Anda mencoba saran ini dan beruntung?
Ananda Mahto
Salin dan tempel kode di terminal tetapi kembalikan ke: -e ekspresi # 1, char 14: unterminted 's' command Hilang argumen untuk -o ... Ada saran
raphie
Saya berubah menjadi "dan sekarang saya mendapatkan Galat saat menyimpan ke file: echo svgfile.svg | sed -e 's / svg $ / 2.svg'
raphie
Hebat - ini akan menjadi lebih baik ketika librsvgbug teks yang mengalir diperbaiki ...
Joce
7

Saat ini tidak ada cara asli untuk melakukan itu di Inkscape. Satu-satunya cara adalah mengubah ukuran konten dan dokumen secara terpisah.

julien_c
sumber
2

Meskipun ada beberapa cara untuk melakukannya - seperti disebutkan di sini - salah satu cara yang dapat bekerja dengan sangat baik adalah dengan menggunakan a viewBox. Anda cukup mengubah isi dari tag SVG seperti:

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

Apa yang viewBoxdilakukan adalah mendefinisikan sistem koordinat internal untuk dokumen tersebut. Anda kemudian dapat dengan mudah skala dokumen hanya dengan memodifikasi widthdan heightatribut yang diperlukan.

Perhatikan bahwa ada beberapa kelemahan. Untuk satu hal, hanya ada konteks tertentu yang berfungsi, khususnya jika Anda entah bagaimana langsung memasukkan dokumen SVG di halaman markup Anda. Menggunakan <img>tag dengan ini mungkin atau mungkin tidak menghasilkan hasil yang tidak terduga. Anda harus melakukan riset sendiri untuk mengetahui cara terbaik untuk melakukan ini.

Andrew Gray
sumber
2
Ini tidak berhasil untuk saya, dan saya tidak mengerti mengapa. Jika saya mengedit lebar dan tinggi tetapi membiarkan viewBox apa adanya: Ketika Chrome merender file svg mentah, itu hanya menunjukkan sebagian kecil dari konten. Saat Inkscape merendernya, ia menampilkan seluruh konten, tetapi jauh lebih besar dari halaman, yang merupakan bagian kecil yang sama (kiri atas) yang ditunjukkan Chrome. Jadi, sama sekali: konten tidak diubah menurut koordinat kotak tampilan. SVG saya memiliki beberapa elemen svg anak di dalamnya, tetapi semuanya ditransformasikan berdasarkan (saya berasumsi) koordinat viewbox.
CPBL
Bekerja untuk saya di Inkscape 0.92.3, Firefox 66, dan Chromium 73.
Socowi