Gmagick将SVG转换为PNG,透明背景

时间:2017-02-17 08:35:05

标签: php svg background transparent gmagick

我在将SVG转换为PNG时遇到问题。背景是白色的,甚至是坚硬的,它应该是透明的。

示例代码:

$im = new Gmagick();
$im->readImageBlob('<?xml version="1.0"?>'.$svg);
$im->setImageBackgroundColor(new \GmagickPixel('transparent')); 
$im->setimagecolorspace(\Gmagick::COLORSPACE_TRANSPARENT); 
$im->scaleImage(1024,1024,1);
$im->setResolution ("300","300");
$im->setImageFormat('PNG32');
$im->setImageDepth(32);
$im->getImageBlob();

示例SVG:

<svg width="640" height="480">
    <rect height="254" width="459" y="117" x="99" stroke-width="5" stroke="#000000" fill="#FF0000" />
    <rect width="241.35593" height="211.52542" x="387.7966" y="225.08475" />
</svg>

直接使用Graphic Magick,我没有问题 例行:“

gm convert -size 1200x1200 -background none svg.svg svg.png

我该如何解决这个问题?

编辑:目前我使用此代码

shell_exec("gm convert -resize ".$width."x".$height." -background none svg.svg svg.png");

这有效,但我讨厌使用shell_exec,它很脏。

1 个答案:

答案 0 :(得分:0)

有点晚了,但是您必须使用方法“ backgroundColor”而不是“ imageBackgroundColor”,并且必须将其放置在“ readImageBlob”之前,而不是之后。

所以您的代码应如下所示:

$im = new Gmagick();
$im->setBackgroundColor(new \GmagickPixel('transparent')); 
$im->readImageBlob('<?xml version="1.0"?>'.$svg);
$im->setimagecolorspace(\Gmagick::COLORSPACE_TRANSPARENT); 
$im->scaleImage(1024,1024,1);
$im->setResolution ("300","300");
$im->setImageFormat('PNG32');
$im->setImageDepth(32);
$im->getImageBlob();