Php Gmagick使用透明背景将SVG转换为PNG
我在将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
$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();