2011-10-13 42 views
4

在一個SVG文件轉換爲PNG與ImageMagick的(我使用的是6.3.7),好像像素的右邊的線,並在底部的丟失轉換。ImageMagick的SVG轉換爲PNG吃最右邊和最底層的像素

例如,考慮this simple SVG表示鑽石,在SVG的60x60的幾何形狀完美合身的。當轉換爲SVG與

convert diamond.svg diamond.png 

它(在尺寸上也爲60x60像素的)生成this PNG。巴布亞新幾內亞最右端和最下方的鑽石角落已被削掉。此外,鑽石看起來稍微放大了1個像素。

有人可以證實這種行爲,可能提供一些理由,也許提供一個修復?

+0

你有沒有檢查出我的答案? –

回答

0

「有人可以證實這種行爲,可能提供了一些理由,也許提供瞭解決?」

  1. SVG是矢量格式,因此不知道像素的(當然,除非你嵌入像素圖像到SVG ...)。

  2. 尺寸然而,您的SVG路徑是以像素爲單位定義的。這就是爲什麼它的大小是60x60。

  3. 當你渲染的SVG(在Inkscape中或任何SVG瀏覽器顯示它),你可以無縫縮放圖像,和你永遠不會發現一個像素化(除非你用放大鏡看的像素爲單位監控熒幕)。

  4. 然而,PNG是一個矢量格式,它是一個位圖格式,由像素。要繪製對角線的黑色邊緣,需要使用「階梯式」黑色像素(可能通過在其間添加一些灰度像素進行平滑處理以實現一些抗鋸齒效果)。

  5. 當你問到的ImageMagick你的鑽石轉換成60×60像素大小的PNG它只有60X60的網格創建對角線。

  6. 現在做數學運算:你如何填充從1像素高度變爲30像素高的「perfekt」像素樓梯(這是第31步,你計算了嗎?)並返回1像素高度這將是第61步,你計算它?))到這樣一個網格?!? - 你不能!

  7. 唯一的「修復」,以保持最佳狀態(沒有「削去」,你所觀察到效果)這是可能的是縮放PNG使用大小61x61的(或122x122):

    convert diamond.svg -resize 61x61 +antialias diamond.png 
    
    rsvg-convert -w 61 -h 61 -o diamond-rsvg.png diamond.svg 
    
  8. 轉換小矢量圖形以小像素圖形將總是「鬆」的東西,並且將總是要求你對某些妥協被接受!