svg ファイルを使用svgwrite
および生成していますが、それらを PNG または JPEG に変換するにはどうすればよいですか?
13337 次
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 に答える