Inkscape'de, hem belgeyi hem de içeriğini aynı anda yeniden boyutlandırın


25

Oldukça basit görünen bir şey yapmakta zorlandım:

Inkscape'de belgeyi ve içeriğini (yani çizimleri) aynı anda nasıl yeniden boyutlandırabilirim?

Biraz bağlam: Asıl çizimleri açıkça yeniden boyutlandırmak zorunda kalmadan, İsim Projesi'nden (genellikle 100x100 piksel dokümanlar) oldukça fazla sayıda SVG belgesini yeniden boyutlandırmak istiyorum .

Not: Komut satırı çözümü varsa, bununla da çalışabilirim!


Son hedefinizden emin değilim, ancak AFAIK, belge alanını yazdırma işleminin yanı sıra, yalnızca belge alanını yazdırma seçeneğinizin olduğu bir yerde de keyfi. Ancak, yalnızca nesne alanını da yazdırabilirsiniz, böylece engelinizi aşmanın bir yolu olabilir.
DA01,

@ DA01 Bitmap'e dışa aktardığınızda belgenin oldukça yararlı olduğunu düşünüyorum (ki bu ben yapıyorum).
julien_c

Bu arada, köşeleri sürüklemeyen, ancak açıkça bir boyut belirleyeceğiniz bir nesneyi yeniden boyutlandırmanın bir yolu var mı?
Peşinde

1
o zaman bile keyfi bir seçenek. Ihracat 'bölgeniz' kadar kolayca bir içerik kutusu çizebilirsiniz. Aslında, genellikle böyle yapmayı tercih ederim. Yeniden boyutlandırma ile ilgili olarak, nesnelerinizi seçebilir ve ardından a) üstteki durum çubuğunu kullanın ve boyut değişikliklerinizi yazın veya b)
OBJEKT

@julien_c: Bence buradaki amaç, nesnelerin düz bir vektör sanatı olduğu ve bir raster cihaza (veya dosyaya) çıkana kadar kendi boyutlarının olmadığı . Boyutları (inç, piksel, küp) aslında ilgisizdir.
horatio

Yanıtlar:


24

Hangi işletim sistemini çalıştırdığınızı söylemediniz. Ubuntu kullanıyorum ve librsvg2'yi başarıyla kullanabildim.

Ubuntu'ya erişiminiz varsa, işte yapabilecekleriniz. İlk önce, librsvg2'yi kurun:

sudo apt-get install librsvg2-bin

Ardından, cdSVG'lerinizi içeren dizine (yalnızca SVG'lere sahip olduğundan emin olun!) Ve aşağıdaki gibi bir komut kullanın:

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

Bu, 200px x 200px boyutlarında ve "original-file-name.new.svg" olarak kaydedilmiş yeni bir SVG grubu oluşturur.

Boyutları hesaplamak biraz kafa karıştırıcıdır. SVG'yi SVG'ye dönüştürmek için biraz matematik yapmanız gerekir. Rsvg-convert'deki "height" ve "width" seçenekleri, bu durumda px yerine pt'yi kullanır, bu nedenle, eğer 80 px istiyorsanız, 100 px, 120 p eğer isterseniz 80 kullanın.

PNG'leri çıkarmak için rsvg-convert'i de kullanabilirsiniz. En azından benim deneyimlerime göre, dosyayı rasterleştirmek ImageMagick'ten çok daha iyi. Eğer değişime ihtiyaç olduğunu Bildirim -fiçin png, içinden desen tasarruf çıkışını değiştirmek için gerekmez 's/svg$/new.svg/'için 's/svg$/png/'ve size piksel değerleri olarak istediğiniz genişlik ve yüksekliği girin.

for old in *; do
    new="$(echo "$old" | sed -e 's/svg$/png/')"
    rsvg-convert "$old" -w 200 -h 200 -f png -o "$new"
done

Bu arada, bunu toplu halde çok sayıda SVG'ye yapmanız gerektiğini varsayıyorum. Olmazsa , yine de şu şekilde kullanabilirsiniz rsvg-convert: rsvg-convert noun_project_1576.svg -w 320 -h 160 -f svg -o noun_project_1576-skewed.svg"noun_project_1576" adlı bir kaynak dosyasını alır ve 200px ile 400px olacak şekilde eğriltir ve "noun_project_1576-skewed" olarak yeniden adlandırır.
Ananda Mahto

@julien_c, yeni takipte: Bu öneriyi denedin mi ve şansın var mı?
Ananda Mahto

Kodu terminalde kopyalayıp yapıştırın, ancak sed: -e ifade # 1, char 14: underminted 's' komutunu geri
döndürün, ancak

Ben `olarak değiştirdim ve şimdi dosyaya kaydetme hatası alıyorum: echo svgfile.svg | sed -e 's / svg $ / 2.svg'
raphie

Harika - librsvgakan metin hatası
düzeldiğinde

7

Şu anda bunu Inkscape'de yapmanın yerel bir yolu yoktur. Tek yol, içeriği ve belgeyi ayrı ayrı yeniden boyutlandırmaktır.


2

Bunu yapmanın birkaç yolu olsa da - burada belirtildiği gibi - gerçekten iyi çalışabilecek bir yol kullanmaktır viewBox. SVG etiketinin içeriğini şu şekilde değiştirirsiniz:

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

Bu viewBox, belge için dahili bir koordinat sistemi tanımlar. Ardından, belgeyi widthve heightniteliklerini gereken şekilde değiştirerek kolayca ölçeklendirebilirsiniz .

Yine de bazı sakıncalar olduğuna dikkat edin. Birincisi, özellikle işaretleme sayfanıza SVG belgesini bir şekilde doğrudan dahil ediyorsanız, bunun içinde çalıştığı belirli bağlamlar vardır. Bununla bir <img>etiket kullanmak, beklenmeyen sonuçlara yol açabilir veya vermeyebilir. Bunu nasıl en iyi şekilde yapacağınızı bulmak için kendi araştırmalarınızdan bazılarını yapmanız gerekecektir.


2
Bu benim için işe yaramıyor ve nedenini anlamıyorum. Genişliği ve yüksekliği düzenlersem ancak viewBox'ı şu şekilde bırakırsam: Chrome, ham svg dosyasını oluştururken, içeriğin yalnızca küçük bir bölümünü gösterir. Inkscape tarafından oluşturulduğunda, içeriğin tamamını gösterir, ancak Chrome'un gösterdiği aynı küçük (sol üst) bölüm olan sayfadan çok daha büyüktür. Yani, tamamen: içerik, görünüm kutusu koordinatlarına göre ölçeklenmiyor. Benim SVG'mde birkaç çocuk svg öğesi var, ancak hepsi görünüm kutusu koordinatlarına dayanarak (sanırım) dönüştürülüyor.
CPBL

Benim için Inkscape 0.92.3, Firefox 66 ve Chromium 73'te çalıştı.
Socowi
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.