4

SVG を PNG にラスタライズするために Cairo/RSVG ベースのソリューションを使用しています。これは、 Convert SVG to PNG in Pythonの StackOverflow で既に説明されています。ただし、このソリューションはカスタム フォントでは機能しないようです。

SVG フォントの埋め込みについて説明しているこのページを見つけました。

例で説明されているように、XLink を介して外部 SVG からそれらを含めようとしました。フォントを同じ SVG ファイルに直接埋め込んでみました。それで失敗したので、CSS Web Fonts 構文を試しました。Cairo でレンダリングする場合、3 つの方法のいずれも機能しません (また、Ubuntu のデフォルト ビューアーである Eye of GNOME でも機能しません)。

ImageMagick を試してみましたが、Cairo とまったく同じ結果が得られました。

一方、3 つのフォント埋め込み方法はすべて、Google Chrome またはwebkit2png.pyを使用して WebKit でフォントを適切にレンダリングします。ただし、可能であれば、サーバー上で QT WebKit を使用することは避けたいと思います。これは、重要なセットアップ (xvfb などを含む) であり、非常に効率的でも安定的でもない可能性があるためです。

Python から SVG を PNG にレンダリングする別の方法はありますか?

4

4 に答える 4

5

私は 1 週間かけてこの問題を調査し、サーバー側でカスタム フォントを使用した SVG のレンダリング/ラスタライズを処理する最善の方法は、それらのフォントをサーバーにインストールすることであると結論付けました。私が試したツール (rsvg、imagemagick、phantomjs、qtwebkit...) は、Web フォントと svg フォントを処理できませんでした。

Google には、サーバー上でダウンロードして使用できる数百のフォント(および増加中) があります。

  • OTF または TTF フォントをダウンロードする
  • それらをサーバーにインストールし、フォントキャッシュを更新します
  • 外部フォントの CSS 定義を、SVG ドキュメント内のフォント ファミリ名に置き換えます。

また、Web ページでも同じフォントを使用する必要がある場合は、Google CDN に直接リンクして WOFF ファイルを取得し、サーバー時間とネットワーク帯域幅を節約できます。

于 2012-11-03T23:14:09.437 に答える
1

おそらくこれにより、より良い結果が得られます

 inkscape inputfile.svg --export-png=exportfile.png

これを Python から実行する方法については、こちらで説明しています: Calling an external command in Python

于 2011-09-06T14:29:10.340 に答える
0

Imagemagickを使用すると、サーバーにインストールされ、特定の操作で使用できるフォントを使用したsvgラスタライズにまだ苦労していますが、-convert from .svg to .png ...を使用すると失敗します....あらゆる種類のテキストをarialに変換するようです. ImageMagick のバグか、.svg に必要な特定の形式である可能性があると思います

于 2013-07-11T13:58:28.237 に答える
0

RSVG で確認すべき点がいくつかあります。

  • フォント ソース ファイルがシステムまたはユーザーのフォント パスにあること
  • SVG 内のそのフォント名は、スペースが含まれていても引用されません。librsvg は、引用符がフォント名の一部であると想定し、ソース ファイルを見つけられません。
于 2016-06-05T20:56:07.087 に答える