Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Gmagick使用透明背景将SVG转换为PNG_Php_Svg_Background_Transparent_Gmagick - Fatal编程技术网

Php Gmagick使用透明背景将SVG转换为PNG

Php Gmagick使用透明背景将SVG转换为PNG,php,svg,background,transparent,gmagick,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_TRANSPAREN

我在将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();
我怎样才能解决这个问题


编辑:目前我使用此代码

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

这是可行的,但我不喜欢使用shell_exec,它太脏了。

有点晚了,但是你必须使用方法“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();
$im=new Gmagick();
$im->setBackgroundColor(新建\GmagickPixel('transparent'));
$im->readImageBlob('.$svg);
$im->setimagecolorspace(\Gmagick::COLORSPACE\u TRANSPARENT);
$im->scaleImage(10241024,1);
$im->setResolution(“300”、“300”);
$im->setImageFormat('PNG32');
$im->setImageDepth(32);
$im->getImageBlob();

我没有使用Gmagick扩展的经验,但在ImagickPixel中,您需要指定像new-ImagickPixel(“透明”)一样的图像,如果您是在$im=new-Gmagick()中创建非透明图像;Thx用于响应,但我只能使用Gmagick
shell_exec("gm convert -resize ".$width."x".$height." -background none svg.svg svg.png");
$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();