web-dev-qa-db-ja.com

コマンドラインでSVGをスケーリングするにはどうすればよいですか?

SVGには、サイズを決定する次のプロパティがあります。

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

アスペクト比を壊すことなく、コマンドラインで特定のSVGを400ptのwithにスケーリングしたいと思います。つまり、上記の3つの値は、次のsvgコードのすべてのポイントおよびを正しく変更する必要があります。キャンバスサイズだけを変更するのではなく、svg画像全体のサイズを変更します。そして、私はGUI /手でそれをしたくはありませんが、CLIでそれをしたいのです。

コマンドラインで指定した幅にSVGを自動的にスケーリングするにはどうすればよいですか?

理由:画像が小さすぎると、Wikipediaのプレビューが悪く見えます。例として this image を参照してください。

Inkscape-GUIでこのタスクを実行する方法

  1. Shift + Ctrl + M(変換)
  2. スケール(「比例してスケール」をチェック)
  3. 幅を入力してください
  4. Shift + Ctrl + D(ドキュメントのプロパティ)
  5. ページを選択範囲に合わせる

これを行うには、自動CLIウェイが必要です。

ちなみに、inkscapeは単純に適用されました

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

画像全体に。

18
Martin Thoma

rsvg-convert から librsvg2-binパッケージはsvgのサイズを変更できます。

詳細な手順については、 この回答 を参照してください。

16
bluegray

1つの画像のみを変更する場合は、テキストエディター(emacsなど)で画像を開き、幅のエントリを変更します。

ギークでCLIのみのアプローチの場合は、sedを使用します。

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

ただし、これは画像をスケーリングせず、幅のみを設定します。


おそらくより良い方法ですが、多くの画像に対してバッチモードで実行できる方法は、コマンドラインからinkscapeを使用することです。

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

多くのファイル(すべてのファイルの幅を同じにしたい場合)では、次のようにします。これはpngに変換する必要があり、ファイル名にスペースがないことを前提としています。

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

ImageMagick の変換が最初の選択肢でしたが、svgをスケーリングすると変換が失敗するようです。

4
terdon