Bagaimana saya bisa skala SVG melalui baris perintah?

17

SVG memiliki properti ini, yang menentukan ukurannya:

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

Saya ingin skala SVG yang diberikan ke dengan dengan 400ptoleh baris perintah tanpa melanggar aspek rasio. Ini berarti, ketiga nilai di atas harus diubah dengan benar dan semua poin dalam kode svg berikut. Saya tidak ingin mengubah hanya ukuran kanvas, tetapi seluruh ukuran gambar svg. Dan saya tidak ingin melakukannya dengan GUI / dengan tangan, tapi saya ingin melakukannya dengan CLI.

Bagaimana saya bisa secara otomatis skala SVG oleh baris perintah ke lebar yang diberikan?

Alasan: Pratinjau Wikipedia terlihat buruk jika gambarnya terlalu kecil. Lihat gambar ini sebagai contoh.

Bagaimana saya akan melakukan tugas ini dengan Inkscape-GUI

  1. Shift + Ctrl + M (Transform)
  2. Skala (centang "skala proporsional")
  3. Masukkan lebar
  4. Shift + Ctrl + D (Properti dokumen)
  5. Sesuaikan halaman dengan pilihan

Sekarang saya ingin CLI-cara otomatis untuk melakukan ini.

Omong-omong, inkscape hanya diterapkan

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

ke seluruh gambar.

Martin Thoma
sumber
OS apa yang Anda gunakan?
terdon
Ubuntu 10.04.4 LTS (saya akan memperbaruinya ...)
Martin Thoma
File SVG hanyalah file teks. Anda mungkin dapat mengedit file dan mengubah width, heightdan viewBoxnilai-nilai untuk sesuatu seperti width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau
Saya tahu mereka hanya file teks. Tetapi jika saya hanya mengedit nilai-nilai ini, ukuran gambar tidak berubah. Hanya ukuran kanvas yang berubah. Mengedit dengan tangan bukanlah suatu pilihan, saya secara eksplisit menyatakan bahwa saya ingin mengubahnya secara otomatis.
Martin Thoma
Ya, saya tahu Anda meminta cara otomatis untuk melakukannya, tetapi berpikir bahwa jika Anda bisa mencari tahu apa yang harus diubah, dari segi teks, maka Anda dapat mengotomatiskannya menggunakan salah satu dari sejumlah alat pengedit teks yang tersedia (seperti seperti sedpada jawaban @ terdon). Satu masalah yang mungkin Anda temui adalah bahwa nilainya perlu berbeda dengan file .svg lain yang Anda ingin lakukan hal yang sama.
martineau

Jawaban:

15

rsvg-convertdari librsvg2-binpaket dapat mengubah ukuran svg.

Lihat jawaban ini untuk instruksi lengkap.

bluegray
sumber
4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgbekerja. Tetapi rsvg-convert tampaknya tidak hanya mengubah ukuran.
Martin Thoma
2
@moose, bagaimanapun, seperti dicatat pada jawaban itu, rsvg-convert menggunakan titik, bukan piksel. Jika Anda beruntung, Anda bisa membagi ukuran yang Anda maksudkan dengan 1,25. Namun, jika Anda menginginkan sesuatu seperti 24px (19,2 poin), Anda kurang beruntung, karena tidak mau menempatkan non-integer sebagai lebar atau tinggi (tidak yakin apakah SVG mengizinkan ini).
Matthew Flaschen
@ MartinThoma Ya, memang. File keluaran SVG sekitar dua kali lipat dari ukuran aslinya. Kenapa ya? Membaca rsvg-convert --helptidak memberikan petunjuk apa pun.
Serge Stroobandt
1
rsvg convert juga tampaknya mengubah jalur yang dielus menjadi jalur yang diuraikan. Anda mungkin tidak menginginkan ini (saya tahu saya tidak)
scruss
1
Alat ini sepertinya macet berubah menjadi setiap elemen dan tidak benar-benar mengubah ukuran aslinya.
rtaft
3

Jika Anda hanya ingin mengubah satu gambar, buka di editor teks (misalnya emacs) dan ubah entri lebarnya.

Untuk geekier, pendekatan CLI saja, gunakan sed:

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

Ini tidak akan mengubah skala gambar, hanya mengatur lebarnya.


Cara yang lebih baik, mungkin, tetapi tentu saja yang dapat dijalankan dalam mode batch untuk banyak gambar menggunakan inkscape dari baris perintah:

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

Untuk banyak file (dengan asumsi Anda ingin semuanya memiliki lebar yang sama), lakukan hal berikut. Dibutuhkan konversi ke png dan menganggap tidak ada spasi di nama file Anda:

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

Konversi ImageMagick adalah pilihan pertama saya tetapi tampaknya rusak ketika menskala svgs.

terdon
sumber
7
Inkscape-command Anda menghasilkan PNG, tapi saya ingin SVG. Perintah svg Anda hanya mengubah ukuran kanvas, tetapi bukan ukuran gambar. Anda tidak bisa begitu saja menggunakan editor teks dan hanya mengubah nilai yang saya sebutkan di atas. Saya pikir saya harus mengklarifikasi pertanyaan.
Martin Thoma
Anda juga perlu menambahkan tag: ... "> <g transform =" scale (2) "> <path .... /> </g> </svg> untuk menskala gambar dengan faktor yang sama.
Stofke