Bir SVG'yi komut satırı üzerinden nasıl ölçekleyebilirim?


17

Bir SVG, boyutunu belirleyen şu özelliklere sahiptir:

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

400ptEn boy oranını bozmadan verilen bir SVG'yi komut satırıyla birlikte ölçeklemek istiyorum . Bu, yukarıdaki üç değerin doğru bir şekilde değiştirilmesi ve aşağıdaki svg kodundaki tüm noktaların değiştirilmesi gerektiği anlamına gelir . Sadece tuval boyutunu değil, tüm svg görüntü boyutunu değiştirmek istiyorum. Ve bunu bir GUI / elle yapmak istemiyorum, ama CLI ile yapmak istiyorum.

Bir SVG'yi komut satırına göre otomatik olarak belirli bir genişliğe nasıl ölçeklendirebilirim?

Sebep: Görüntü çok küçükse Wikipedia'nın önizlemesi kötü görünüyor. Bu görüntüyü örnek olarak görün .

Bu görevi Inkscape-GUI ile nasıl yaparım?

  1. Üst Karakter + Ctrl + M (Dönüştür)
  2. Ölçek ("orantılı olarak ölçekle" seçeneğini işaretleyin)
  3. Genişliği girin
  4. Shift + Ctrl + D (Belge özellikleri)
  5. Sayfayı seçime sığdır

Şimdi bunu yapmak için otomatik bir CLI yolu istiyorum.

Bu arada, inkscape basitçe uygulandı

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

tüm görüntüye.


Hangi işletim sistemini kullanıyorsunuz?
terdon

Ubuntu 10.04.4 LTS (Ben güncelleyeceğim ...)
Martin Thoma

SVG dosyaları sadece metin dosyalarıdır. Dosyayı düzenlemek ve değiştirmek mümkün olabilir width, heightve viewBoxböyle bir şey değerleri width="100%" height="100%" viewBox="0 0 400 212.58569".
martineau

Sadece metin dosyaları olduklarını biliyorum. Ancak yalnızca bu değerleri düzenlersem görüntünün boyutu değişmez. Sadece tuval boyutu değişir. Elle düzenleme bir seçenek değildir, açıkça otomatik olarak değiştirmek istediğimi belirtmiştim.
Martin Thoma

Evet, bunu yapmak için otomatik bir yol istediğini biliyorum, ancak neyin değiştirileceğini anlayabilirsen, metin olarak, o zaman mevcut metin düzenleme araçlarından birini kullanarak otomatikleştirebileceğini düşündüm. olarak sed) Terdon cevabı @ içinde. Karşılaşabileceğiniz sorunlardan biri, değerlerin aynı şeyi yapmak istediğiniz diğer .svg dosyalarıyla farklı olabileceğidir.
martineau

Yanıtlar:


15

rsvg-convertdan librsvg2-binpaketin svg 's boyutlandırabilirsiniz.

Tüm talimatlar için bu cevaba bakınız .


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svgçalıştı. Ancak rsvg-convert yalnızca yeniden boyutlandırmadan daha fazlasını yapıyor gibi görünüyor.
Martin Thoma

2
@moose, ancak, bu yanıtta belirtildiği gibi, rsvg-convert pikselleri değil noktaları kullanır. Şanslıysanız, istediğiniz boyutu 1,25'e bölebilirsiniz. Bununla birlikte, 24 piksel (19,2 inç) gibi bir şey istiyorsanız, genişlik veya yükseklik olarak tamsayı olmayan bir değer koymak istemediğinden (SVG'nin buna izin verip vermediğinden emin değilsiniz) şansınız kalmaz.
Matthew Flaschen

@MartinThoma Evet, gerçekten. SVG çıktı dosyası orijinal boyutun yaklaşık iki katıdır. Nedenini merak ediyorum? Okuma rsvg-convert --helpherhangi bir ipucu vermez.
Serge Stroobandt

1
rsvg convert ayrıca konturlu yolları anahatlı yollara dönüştürüyor gibi görünüyor. Bunu istemeyebilirsiniz (bilmediğimi biliyorum)
scruss

1
Bu araç, her bir öğeye dönüşümleri sıkıyor gibi görünüyor ve aslında orijinal boyutları değiştirmiyor.
rtaft

3

Yalnızca bir görüntüyü değiştirmek istiyorsanız, görüntüyü bir metin düzenleyicisinde açın (örneğin emacs) ve genişlik girişini değiştirin.

Bir geekier, sadece CLI yaklaşımı için sed kullanın:

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

Bu görüntüyü ölçeklendirmez, yalnızca genişliğini ayarlar.


Belki de daha iyi bir yol, ama kesinlikle birçok görüntü için toplu modda çalıştırılabilen bir yol, komut satırından inkscape kullanmaktır:

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

Birçok dosya için (hepsinin aynı genişliğe sahip olmasını istediğinizi varsayarsak) aşağıdakileri yapın. PNG'ye dönüştürmeyi gerektirir ve dosya adlarınızda boşluk olmadığını varsayar:

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

ImageMagick'in dönüşümü benim ilk tercihimdi ama svgs ölçeklenirken kırılıyor gibi görünüyor.


7
Inkscape komutunuz bir PNG ile sonuçlanır, ancak bir SVG istiyorum. Svg komutunuz yalnızca tuval boyutunu değiştirir, görüntünün boyutunu değiştirmez. Bir metin düzenleyicisi kullanamaz ve yalnızca yukarıda bahsettiğim değerleri değiştiremezsiniz. Sanırım soruyu açıklığa kavuşturmak zorundayım.
Martin Thoma

ayrıca bir etiket eklemek gerekir: ... "> <g dönüşümü =" ölçek (2) "> <yolu .... /> </ g> </ svg> Aynı faktörü ile ölçeklemek üzere.
Stofke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.