14

svg ファイルを使用svgwriteおよび生成していますが、それらを PNG または JPEG に変換するにはどうすればよいですか?

4

4 に答える 4

8

pyvipsは SVG の読み込みをサポートしています。無料で、高速で、メモリをほとんど必要とせず、macOS、Windows、および Linux で動作します。

次のように使用できます。

import pyvips

image = pyvips.Image.new_from_file("something.svg", dpi=300)
image.write_to_file("x.png")

デフォルトの DPI は 72 で、少し低いかもしれませんが、任意の DPI を設定できます。明らかな方法で、代わりに JPG に書き込むことができます。

次のように、必要なピクセル寸法でロードすることもできます。

import pyvips

image = pyvips.Image.thumbnail("something.svg", 200, height=300)
image.write_to_file("x.png")

これにより、SVG が 200 x 300 ピクセルのボックスに収まるようにレンダリングされます。ドキュメントはすべてのオプションを紹介しています。

pyvips SVG ローダーにはいくつかの優れたプロパティがあります。

  • 実際のレンダリングには librsvg を使用するため、PNG には高品質のアンチエイリアス処理されたエッジが含まれます。
  • これは、レンダリングのために単にインクスケープにシェルアウトする ImageMagick のようなシステムよりもはるかに高速です。
  • プログレッシブ レンダリングをサポートします。大きな画像 (1 辺に数千ピクセル以上) はセクションでレンダリングされ、非常に大きな画像であってもメモリの使用を制御します。
  • ストリーミングをサポートしているため、中間ストレージを必要とせずに、SVG を巨大な Deep Zoom ピラミッド (たとえば) に直接レンダリングできます。
  • ファイルだけでなく、メモリ領域、文字列、パイプからの入力もサポートしています。

文字列からのレンダリングは便利です。例:

import pyvips

x = pyvips.Image.svgload_buffer(b"""
<svg viewBox="0 0 200 200">
  <circle r="100" cx="100" cy="100" fill="#900"/>
</svg>
""")

x.write_to_file("x.png")
于 2020-07-13T13:13:50.070 に答える