2015-04-22 2 views
0

Я пытаюсь преобразовать SVG файл с XLink: HREF для изображения внутри с ImageMagick, используя команду:ImageMagick конвертировать файл SVG приводит пустое изображение

convert file.png result.png 

Но это дает мне пустой PNG файл, я уверен, что проблема возникает из образа, потому что другие инструкции отображаются в файле png. Я могу заставить его работать с помощью команды:

convert msvg:file.svg result.png 

ли кто-то знает, как сделать эту работу без «msvg:» часть? Потому что я должен сделать это с помощью php-Imagick после, и я не могу добавить «msvg:» в свой PHP-код.

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

Если вы используете Imagick, вы можете также разместить свой текущий код PHP? – erjiang

+0

Я добавил свой код Php к моему сообщению beacause, слишком длинный для комментариев. – JigokuArch

+1

Для обеспечения безопасности делегат rsvg не загружает внешние ресурсы изображения. Попробуйте установить формат MSVG перед чтением даты blob с помощью '$ img-> setFormat ('MSVG');' – emcconville

ответ

1

Ответ emcconvilutionle было решение, я просто должен был написать

$im->setFormat('MSVG'); 

перед тем

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

Рад помочь и приветствовать в StackOverflow. Примите свой ответ, чтобы другие с подобными вопросами знали, что это решение работает. – emcconville

Смежные вопросы