2011-09-06 110 views
3

我正在使用基於開羅/ RSVG的解決方案將SVG轉換爲PNG。它已經在StackOverflow的Convert SVG to PNG in Python中描述過了。 但是,此解決方案似乎不適用於自定義字體。我找到了this page describing embedding SVG fonts使用Python中的自定義字體將SVG轉換爲PNG

我試圖通過XLink將它們從外部SVG包含進來,如示例中所述。我試圖直接在相同的SVG文件中嵌入字體。由於失敗,我嘗試了CSS Web字體語法。在使用Cairo進行渲染時,這三種方法都不起作用(它也不適用於GNOME的Ubuntu默認查看器Eye)。

我試過ImageMagick,結果和開羅一模一樣。

另一方面,使用全部3種字體嵌入方法,WebKit中的字體都可以使用Google Chrome或webkit2png.py進行渲染。但是,如果可能的話,我想避免在服務器上使用QT WebKit,因爲它是非常簡單的設置(包括xvfb等),我擔心這可能不會導致非常高效且不穩定。

是否有任何替代方法從Python渲染SVG到PNG?

回答

0

你可以嘗試使用inkscape,或許這給你更好的結果:

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

蟒蛇運行,這是說明如下:Calling an external command in Python

+0

不太確定這是我想安裝在服務器上的軟件 – vartec

+1

@vartec:至少需要*某些第三方產品。不知道爲什麼Inkscape應該比任何其他解決方案更值得信賴。對於Windows,如果您不想安裝該產品,也可以使用便攜式版本http://portableapps.com/apps/graphics_pictures/inkscape_portable,可以直接運行,不需要任何管理員權限,也不需要整合到系統中。 –

+0

剛剛嘗試過,根本不起作用。不僅不渲染自定義字體,而且不處理使用XLink插入的外部圖像。 – vartec

2

我已經花了一週時間研究這個非常問題,並得出結論認爲,使用自定義字體處理SVG的服務器端渲染/光柵化的最佳方法是在服務器上安裝這些字體。我嘗試過的工具(rsvg,imagemagick,phantomjs,qtwebkit ...)無法處理Web字體和svg字體。

谷歌有several hundred fonts(和增長),可以下載和使用的服務器上。

  • 下載OTF或TTF字體
  • 在服務器上安裝它們並刷新字體緩存
  • 在SVG文檔替換字體系列名稱的外部字體的CSS定義。

如果您還需要在網頁中使用這些相同的字體,您可以直接鏈接到Google CDN以獲取WOFF文件以節省您自己的服務器時間和網絡帶寬。

0

隨着Imagemagick我仍然努力與svg柵格化安裝在服務器上的字體,可用於某些操作,但使用-convert從.svg到.png ....失敗似乎將每種類型的文字轉換成宋體。我想這可能是與ImageMagick的或錯誤的.SVG需要一定的格式

0

幾件事情檢查與RSVG:

  • ,字體源文件在您的系統或用戶字體路徑
  • SVG中的字體名稱未被引用,即使它們包含空格。 librsvg會假定引號是字體名稱的一部分,它不會找到源文件。