2

RSVGとCairoがSVG画像内の図面の範囲を見つけることは可能ですか?

つまり、ページの幅/高さではなく、描画要素によって実際に使用されるスペースです。

これは機能せず、ページサイズを返すだけです。

 img = rsvg.Handle(file="myfile.svg")
 (w, h, w2,h2) = svg.get_dimension_data() # gives document's declared size

これはサイズに関する情報を返さないようです:

 svg.render_cairo(context) # returns None

これは機能せず、ページサイズも返します。

 self.svg.get_pixbuf().get_width()

これは、pygtk-all-in-one-2.24.0.win32-py2.7およびRSVG 2.22.3-1_win32を使用したものであり、他の回答で言及されているget_dimensions_sub()関数が見つかりません。

4

1 に答える 1

1

この一見単純な問題を解決しようと、今夜、私は Web を検索しました。rsvg、cairo、または同様のツールを使用して図面の境界ボックスを取得する簡単な方法はないようです。明らかな何かが欠けていない限り。

ただし、--query-allオプションを使用して Inkscape を呼び出すことはできます。これにより、SVG ファイル内のすべてのオブジェクトの寸法と、リストの最初のエントリとして完全な図面が得られます。

import subprocess
output = subprocess.check_output(["inkscape", "--query-all", "myfile.svg"])
values = [line.split(',') for line in output.split('\n')]
whole_drawing = values[0]
[x, y, width, height] = map(float, whole_drawing[1:])

これで、図面の位置がxyおよび に表示さwidthheightます。これにより、クリップされた SVG を新しいファイルに再描画するために rsvg と cairo を使用することが簡単になります。

これを行うための簡単なツールを作成しました。コードが理解しやすいことを願っています。

于 2013-04-02T22:34:30.567 に答える