如何在使用PythonMagick渲染PNG时设置背景颜色

21 投票
6 回答
3320 浏览
提问于 2025-04-16 16:31

我正在尝试用PythonMagick把SVG格式的图片转换成PNG格式,但发现背景颜色没有被识别。

用ImageMagick的命令行工具,效果是正常的:

tmp$ convert -background none access.svg access.png
tmp$ convert -background red access.svg access2.png

这样转换出来的图片背景分别是透明和红色。

但是用PythonMagick的时候,背景颜色似乎被忽略了:

import PythonMagick
svg = PythonMagick.Image('access.svg')
svg.backgroundColor().to_std_string()
'#FFFFFFFFFFFF'
svg.backgroundColor().alpha()
0.0
svg.backgroundColor('none')
svg.backgroundColor().to_std_string()
'#0000000000000000'
svg.backgroundColor().alpha()
1.0
svg.write('access.png')
svg.backgroundColor('red')
svg.backgroundColor().to_std_string()
'#FFFF00000000'
svg.backgroundColor().alpha()
0.0
svg.write('access2.png')

检查输出后发现,两个PNG图片的背景都是白色的。有没有其他方法可以设置背景颜色,让它在生成图片时被识别?

6 个回答

0

这可能是个绕圈子的办法,但你可以先创建一个你想要的颜色的背景图,然后把这些图像组合在一起吗?

我想效果可能是这样的:

image.composite(background, 0, 0, PythonMagick.CompositeOperator.SrcOverDst)

我对PythonMagick的经验很少,但在我尝试设置背景失败后,我会试试这个方法。

来源:

0

如果用命令可以正常工作,那我觉得没什么问题,你可以这样做:

image = 'convert -background red access.svg access.png'
os.system(image)

别忘了要导入os这个模块哦。

import os

另外,你还可以在命令里面使用变量(记得给变量重新命名):

image = 'convert -background '+background+' '+file_from+' '+file_to
1

ImageMagick(还有它的Python接口PythonMagick)对SVG文件的支持非常差。你不要指望它能按照SVG规范来正确显示SVG文件。它会把SVG转换成一种内部的MVG语言,然后再转成PNG格式。你可以查看这个链接了解更多信息:http://www.imagemagick.org/script/magick-vector-graphics.php

ImageMagick 并不是一个用来处理矢量图形的工具。

撰写回答