2015-04-22 143 views
0

我試圖用一個XLink的SVG文件轉換空白圖像:HREF的圖像內使用下面的命令ImageMagick的:ImageMagick的轉換SVG文件導致

convert file.png result.png 

但是這給了我一個空白PNG文件,我相信問題來自圖像,因爲其他指令顯示在png文件中。我可以得到它的工作通過使用命令:

convert msvg:file.svg result.png 

是否有人知道如何使這項工作沒有「msvg:」一部分?因爲我必須在php-Imagick之後執行此操作,並且無法在我的php代碼中添加「msvg:」。

SVG文件:

<?xml version="1.0"?> 
<svg id="svg" width="1024" height="1024" preserveAspectRatio="xMinYMin"> 
    <image id="svg-image" x="0" y="0" width="1024" height="1024" product_id="4" xlink:href="coeur.png"> 
    </image> 
    <rect x="10" y="10" width="80" height="80" fill="red"/> 
</svg> 

ImageMagick的版本:6.7.7.10-5 + deb7u3

的 「轉換格式-list | grep的SVG」 輸出:

MSVG SVG  rw+ ImageMagick's own SVG internal renderer 
SVG SVG  rw+ Scalable Vector Graphics (RSVG 2.36.1) 
SVGZ SVG  rw+ Compressed Scalable Vector Graphics (RSVG 2.36.1) 

PHP代碼:

$im = new Imagick(); 
$draw = new ImagickDraw(); 
$im->readImageBlob($svgParse->asXML()); 
$im->setImagePage(0, 0, 0, 0); 
$im->scaleImage($viewBox['2'],$viewBox['3'], false); 
foreach($ListText as $text){ 
    $draw->setFont(Mage::getBaseDir('media').DS.'font'.DS.$text['font-family'].".ttf"); 
    $draw->setFontSize($text['font-size']); 
    $draw->setFillColor ($text['fill']); 
    $im->annotateImage($draw, $text['x'], $text['y'], 0, $text['text']); 
} 
/*png settings*/ 
$im->setImageFormat("png32"); 
// FB image 
$imFB = clone $im; 
$imFB->resizeImage(1200,630,Imagick::FILTER_LANCZOS,1); 
$imFB->writeImage($filename_FB); 
$imFB->clear(); 
$imFB->destroy(); 
// TW image 
$imTW = clone $im; 
$imTW->resizeImage(280,150,Imagick::FILTER_LANCZOS,1); 
$imTW->writeImage($filename_TW); 
$imTW->clear(); 
$imTW->destroy(); 

$im->writeImage($filename);/*(or .jpg)*/ 

$im->clear(); 
$im->destroy(); 
+0

之前,你能不能也發表您當前的PHP代碼? – erjiang

+0

我將我的PHP代碼添加到了我的帖子中,因爲它太長了評論 – JigokuArch

+1

爲了安全起見,rsvg委託沒有加載外部圖像資源。在用'$ img-> setFormat('MSVG')讀取blob日期之前嘗試設置MSVG格式;' – emcconville

回答

1

emcconvilutionle的答案的解決方案,我只是如果你正在使用imagick寫

$im->setFormat('MSVG'); 

$im->readImageBlob($svgParse->asXML()); 
+0

很高興幫助和歡迎到StackOverflow。請接受您自己的答案,以便有類似問題的其他人知道此解決方案的工作原理 – emcconville