当我转换svg到png我得到一个不完整的png文件和错误。请有人帮助。
from reportlab.graphics import renderPM
from svglib.svglib import svg2rlg
svg_file = 'svgfile.svg'
drawing = svg2rlg(svg_file)
renderPM.drawToFile(drawing, "new_file.png", fmt="PNG")
Can't handle color: url(#a)
Can't handle color: url(#b)
Can't handle color: url(#c)
2条答案
按热度按时间piah890a1#
不确定这对您的情况是否有帮助,但它回答了我的问题(同样是“无法处理颜色:url(...)”消息。
来自
svglib
PyPi文档(https://pypi.org/project/svglib/):不支持颜色渐变(reportlab的限制)
在我的例子中,这些颜色是渐变色,所以我将把svg转换成png,然后通过Python脚本把png图像嵌入到pdf中,这不是我想要的理想效果,但png解决方案满足了我的要求。
5vf7fwbs2#
1.使用findall()和XPath表达式,使用内置的xml.etree.ElementTree库在svg文件中搜索线性渐变。
1.通过选择第一个属性“stop-color”提取纯色。
1.提取“id”属性以搜索使用相应梯度的树。
1.搜索树并用先前获得的纯色覆盖属性“fill”。
(At目前它只寻找线性梯度,并只以第一种颜色作为模板。该脚本可以扩展为其他梯度类型和一个方法,提取多种颜色,以建立一个平均颜色作为模板。)
代码也可以在这里找到:https://github.com/DrakeGladiator/SVGGradientRemover