2012-05-18 130 views
2

答案在我標記的答案上,但在評論中。基本上,在這裏看到:http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18816使用ImageMagick將SVG轉換爲PNG不能處理defs?

與端口上運行此Mac上:

sudo port install ImageMagick +rsvg 

這是我原來的問題:

我test.svg文件是在這裏:https://gist.github.com/2727243

ImageMagick的版本:ImageMagick的6.7.6-9 2012-05-18 Q16(剛剛更新)

我有一個SVG文件的確是defs - >符號來定義e箭頭符號。稍後在文檔中我xlink:使用該符號。這在Chrome中工作正常,箭頭出現,並在其適當的位置:

enter image description here

但是,如果我通過ImageMagick的轉換圖像,像這樣:

convert test.svg test.png 

它不工作。下面是我得到:

enter image description here

「使用」似乎被完全忽略,取而代之的是箭頭的高清渲染。至少,我可以告訴。

我的格式化我的SVG錯誤的Imagemagick處理這種​​情況?或者這只是Imagemagick不支持的東西?我一直在尋找一個明確的答案,找不到一個,一個或另一個。

我也試過這裏的SVG:http://www.carto.net/svg/samples/symbol.svg和符號不起作用。所以我傾向於Imagemagick成爲罪魁禍首。

更新:我試圖改變DEF以下幾點:

<symbol id="arrow" x="25"> 

在瀏覽器中,箭頭確實會移動25的權利,但在ImageMagick的它堅持(0,0)。這讓我相信它不太符合符號定義,更多的是關於它沒有正確地翻譯它。但是,即使我嘗試對「使用」進行直接轉換,甚至更好地完全移除「使用」,仍然會出現箭頭。

+0

接縫像一個錯誤:(但一個解決方法是使用Inkscape,而不是接縫來正確渲染SVG。Inkscape支持從命令行轉換爲PNG,如果這是你正在尋找的。 –

+0

不幸的是,我必須做它與ImageMagick。現實中,這將用於RMagick(Rails接口到IM),並在Heroku完成服務器端。我不認爲我有任何其他選擇。 –

回答

2

更新:這接縫是在ImageMagick的忽略上use標籤xy默認SVG renderar的錯誤(也忽略了g標籤變換屬性)。嘗試使用rsvg後端來代替。

<use xlink:href="#arrow" x="20" y="50"></use> 

要:

<g transform="translate(20 50)"> 
    <use xlink:href="#arrow"></use> 
</g> 
+0

剛剛嘗試過,不幸的是,沒有 –

+1

Bummer。但是我找到了[關於這個問題的這個帖子](http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18816),你能重新編譯imagemagick來使用rsvg嗎? –

+0

BINGO - 那是做的,現在看看Heroku是否可以支持它 - 到目前爲止,我認爲它不會... –

0

你能給更詳細,爲什麼你使用IM

請問,如果你改變它的工作?如果事實證明即時消息在這種情況下是無用的,那麼你肯定會使用別的東西?我是第二個Inkscape的。

也就是說,如果你願意做一些XML操作,也許你仍然可以使用IM。我推測一個符號的內容可以單獨複製到他們的<use>位置;如果你對同一個符號有很多用途,這是一個混亂的解決方法,但是如果你想堅持使用IM,它可能是你唯一的出路。我正在研究這個理論,即它是令人困惑的IM的符號系統 - 如果路徑是「內聯」的,那麼它可能沒問題。

+0

我必須使用ImageMagick,因爲這是在Heroku上託管的Ruby on Rails應用程序上完成的。 Heroku通過RMagick gem提供ImageMagick作爲圖像轉換的方式。由於我不認爲我有辦法安裝Inkscape或使用他們的庫,我堅持使用IM。 –

+0

是的,我準備基本上停止使用「使用」命令並確定並明確表示。但是如果我能弄明白的話,我就會遠離它。並添加RSVG的竅門。我只希望Heroku能支持它。 –

+0

好的,祝你好運! – halfer