Svg çizimlerini komut satırındaki tuvallerine nasıl takabilirim?


13

.svgKomut satırındaki dosyaları kırpmak basittir: $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

Tam tersini yapmam gerek. Çizimi bir 64 x 64nokta tuvaline sığdırmak istiyorum (zaten tüm .svgdosyalarda ayarlanmış ). Maalesef Inkscape bir FitDrawingToCanvaskomut sağlamaz . Ayrıca, bağlantı parçası çizimin en boy oranını korumalıdır.

Önemli olursa: Ubuntu raring kullanıyorum.


1
Tuvali çizime yerleştirdikten sonra yeniden boyutlandırma işi yapar mı? Bkz. Graphicdesign.stackexchange.com/questions/6574/…
Takkat

İki soru: (1) tuval boyutu zaten her durumda ayarlanmıştır, ancak çizimler tuvalden daha büyüktür; veya farklı bir svg belgesine bir svg çizimi ekliyor musunuz ?; (2) "en boy oranını koru": bu, sorularınızda belirtilen 64pt kare tuval ışığında kafa karıştırıcıdır, ancak kare olmayan malzemenin nasıl işleneceğine dair önerilen otomatik bir karar süreciniz var mı? örneğin, yükseklik ... her durumda 64pt olmalı
horatio

@Takkat: İpucu için teşekkürler. İş akışı çalışır, ancak en boy oranı yok edilir. Bunun için bir çözüm arayacak ...
Stefan Endrullis

@horatio: (1) çizim tuvalden daha küçük ve evet, her ikisi de aynı dosyada. (2) Çizimi max (drawingWidth, drawingHeight) = 64pt olan noktaya ölçeklemek istiyorum.
Stefan Endrullis

@Takkat: rsvg-convert'in bir argümanı var - tutma-en-boy oranı :)
Stefan Endrullis

Yanıtlar:


2

Bu soruda bunu yapmanın bir yolunu buldum: Inkscape - Merkez Çizgiyi Komut Satırı / Terminal Üzerinden Sayfaya Çizme

Düzenlenecek resim olarak "foo.svg" ile:

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

Geçerli dizindeki tüm svg görüntülerini düzenlemek için:

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

Ancak bu ikinci komut, çok fazla görüntü düzenlerseniz bilgisayarınızın çökmesine neden olacak bir ton pencere açar. For Linux sadece bu komut daha iyi çalışır:

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

Yukarıdaki komut için, dosyalardan herhangi biri sembolik ise Inkscape, sembolik bağın işaret ettiği hedef dosyayı düzenler. Inkscape'in bunu yapmasını istemiyorsanız, bu komutla sembol bağlantılarını filtreleyebilirsiniz:

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


Ben varken, bunun için yaptığım bash betiğini de gönderebilirim:

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

Onu aradım inkscape-centerve şu şekilde çalıştırın:

inkscape-center <file-or-directory>

İstediğiniz kadar argüman alır, böylece böyle bir şey yapabilirsiniz:

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

Dikkatli olun - Dosya yerine bir dizin belirtirseniz, o dizindeki her svg dosyasını düzenler.


1

İstediğinizi gerçekleştirmek için viewBox'ı kullanabilirsiniz . Bunu Inkscape içinden yapmanın bir yolu olup olmadığını bilmiyorum, ancak SVG standart bir format olduğundan ve istediğiniz işi yapacak başka bir araç olabilir. "Svg komut satırı araçları" için bir hızlı arama dahil olmak üzere bazı ilginç sonuçlar ortaya koydu bu bir CSS simgeleri oluşturmak için.

İkinci bir seçenek, bunu yapmak için kendi aracınızı kendi dilinize yazmak olacaktır. Temel esas, viewBox'ı belgenizin yüksekliğine ayarlamaktır, ardından istediğiniz belgenin genişliğini ve yüksekliğini ayarlamaktır. Son olarak, preserveAspectRatio özniteliğini ayarlayın.

Yukarıda açıklanan değişikliklerin orijinali 744x1052 olan bir belgede nasıl göründüğü.

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
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.