コマンドラインでsvg図面をキャンバスに合わせる方法は?


13

.svgコマンドラインでのファイルのトリミングは簡単です。 $ inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg

私は反対をする必要があります。描画を64 x 64ポイントキャンバス(すべての.svgファイルに設定済み)に合わせたい。残念ながら、InkscapeはFitDrawingToCanvasコマンドを提供していません。さらに、フィッティングは図面の縦横比を維持する必要があります。

重要な場合:Ubuntu raringを使用しています。


1
キャンバスを描画に合わせた後にサイズを変更するとうまくいきますか?graphicdesign.stackexchange.com/questions/6574/を
Takkat

2つの質問:(1)キャンバスサイズは各インスタンスで既に設定されていますが、図面はキャンバスよりも大きいです。または、svg図面を別のsvgドキュメントに挿入しますか?; (2)「縦横比を保つ」:これはあなたの質問で言及された64ptの正方形のキャンバスに照らして紛らわしいですが、非正方形の素材を処理する方法について提案された自動決定プロセスはありますか?例えば高さが...すべての場合には64ptでなければなりません
ホレイショ

@Takkat:ヒントをありがとう。ワークフローは機能しますが、アスペクト比は破壊されます。...そのための解決策を探します
ステファンEndrullis

@horatio:(1)キャンバスよりも小さい図面で、はい、両方とも同じファイルにあります。(2)max(drawingWidth、drawingHeight)= 64ptになるように図面を拡大します。
ステファンEndrullis

@Takkat:rsvg-convertには引数--keep-aspect-ratioがあります:)
Stefan Endrullis

回答:


2

この質問でこれを行う方法を見つけました:Inkscape-コマンドライン/ターミナルを介してページに中央に描画する

「foo.svg」を編集する画像として:

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

現在のディレクトリ内のすべてのsvg画像を編集するには:

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

しかし、この2番目のコマンドは多数のウィンドウを開き、編集している画像が多すぎるとコンピューターがクラッシュします。以下のためのLinuxのみ、このコマンドでは、より良い仕事になります。

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

上記のコマンドでは、ファイルのいずれかがシンボリックリンクである場合、Inkscapeはシンボリックリンクが指すターゲットファイルを編集します。Inkscapeでこれを実行したくない場合は、次のコマンドを使用してシンボリックリンクを除外できます。

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


私がそれに取り組んでいる間、私はこのために作成したbashスクリプトを投稿することもできます。

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

私はそれを呼んだ inkscape-center、次のように実行します:

inkscape-center <file-or-directory>

必要なだけ引数をとるので、次のようなことができます。

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

注意 -ファイルではなくディレクトリを指定すると、そのディレクトリ内のすべてのsvgファイルが編集されます。


1

viewBoxを使用して、目的を達成できます。Inkscape内からこれを行う方法があるかどうかはわかりませんが、SVGは標準形式であり、目的の作業を行う別のツールがある可能性があるためです。「SVGコマンドラインツール」のためのクイック検索には、いくつかの興味深い結果が明らかになった。この1 CSSのアイコンを作成するため。

2番目のオプションは、これを行うために選択した言語で独自のツールを作成することです。基本的な要点は、viewBoxをドキュメントの高さに設定してから、ドキュメントの幅と高さを設定することです。最後に、preserveAspectRatio属性を設定します。

もともと744x1052だったドキュメントで、上記の変更がどのように見えるかを次に示します。

<svg
   width="64"
   height="64"
   viewBox="0 0 744 1052"
    preserveAspectRatio="xMinYMin slice"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.