ImageMagick 将 SVG 文件转换为空白图像
ImageMagick convert a SVG file results a blank image
我正在尝试使用以下命令使用 ImageMagick 将带有 xlink:href 的 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
"convert -list format | 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();
emcconvilutionle 的回答是解决方案,我只需要写
$im->setFormat('MSVG');
之前
$im->readImageBlob($svgParse->asXML());
我正在尝试使用以下命令使用 ImageMagick 将带有 xlink:href 的 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
"convert -list format | 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();
emcconvilutionle 的回答是解决方案,我只需要写
$im->setFormat('MSVG');
之前
$im->readImageBlob($svgParse->asXML());