php - Gmagick 将 SVG 转换为具有透明背景的 PNG

标签 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,它很脏。

最佳答案

有点晚了,但是您必须使用方法“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();

关于php - Gmagick 将 SVG 转换为具有透明背景的 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293056/

相关文章:

php - 如果 Post 值不为空则更新数据库

javascript - 用正确的 viewBox 值替换宽度和高度属性

javascript - 使用 Webpack 在 TypeScript React 应用程序中导入 SVG

android - onDestroy 被调用

php - 如何使用 Strpos() 在针后查找下一个字符串

PHP 和 Javascript 文档生成器

javascript - 多边形 onclick 事件问题及其形状

html - 是否可以为单个 html 元素设置两种背景颜色?

c - GTK_WINDOW_TOPLEVEL Gtk Widget 的背景颜色

php - 异步连接MySQL服务器