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


17

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

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

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

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

理由:画像が小さすぎると、ウィキペディアのプレビューが悪く見えます。例としてこの画像を参照してください。

Inkscape-GUIでこのタスクを行う方法

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

今、私はこれを行うための自動CLI方法が必要です。

ところで、インクスケープは単純に適用されました

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

画像全体に。


どのOSを使用していますか?
テルドン

Ubuntu 10.04.4 LTS(更新する予定です...)
マーティントーマ

SVGファイルは単なるテキストファイルです。あなたは、ファイルを編集して変更することができるかもしれないwidthheightviewBoxのようなものに値をwidth="100%" height="100%" viewBox="0 0 400 212.58569"
マルティノー

テキストファイルのみであることを知っています。しかし、これらの値のみを編集しても、画像のサイズは変わりません。キャンバスのサイズのみが変更されます。手で編集することはオプションではありません。自動的に変更することを明示的に述べました。
マーティントーマ

はい、あなたはそれを行う自動化された方法を要求したことを知っていますが、変更するものをテキストごとに把握できれば、利用可能な多数のテキスト編集ツールのいずれかを使用して自動化できると考えました(などsed)terdonの答え@インチ 発生する可能性のある問題の1つは、同じことをしたい他の.svgファイルとは異なる値が必要になる可能性があることです。
マルティノー

回答:


15

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

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


4
rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svg働いた。しかし、rsvg-convertはサイズ変更だけではないようです。
マーティントーマ

2
しかし、@ mooseは、その答えで述べたように、rsvg-convertはピクセルではなくポイントを使用します。運がよければ、意図したサイズを1.25で割ることができます。ただし、24px(19.2ポイント)のようなものが必要な場合、幅または高さとして非整数を入れたくない(SVGで許可されているかどうかはわかりません)ので、運がありません。
マシューフラシェン14

@MartinThomaはい、確かに。SVG出力ファイルは、元のサイズの約2倍です。なぜだろうか?読書rsvg-convert --helpは手がかりを提供しません。
セルジュStroobandt

1
rsvg convertは、ストロークパスをアウトラインパスに変換するようにも見えます。あなたはこれを望んでいないかもしれません(私はそうではないことを知っています)
-scruss

1
このツールは、各要素への変換をジャムしているように見え、実際には元のサイズを変更しません。
rtaft

3

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をスケーリングすると壊れるようです。


7
inkscape-commandはPNGになりますが、SVGが必要です。svgコマンドは、キャンバスのサイズのみを変更し、画像のサイズは変更しません。テキストエディターを使用して、上記の値のみを変更することはできません。質問を明確にしなければならないと思います。
マーティントーマ

あなたはまた、タグを追加する必要があります... "> <G変換="スケール(2) "> <パス.... /> </グラム> </ SVG>同じ係数で画像を拡大縮小します。
ストフケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.