Windows下Python调用CairoSVG转换SVG至PNG时本地路径报错求助
解决CairoSVG在Windows下转换本地SVG到PNG的URLError问题
嘿,我刚踩过一模一样的坑!你遇到的urllib.error.URLError: <urlopen error unknown url type: c>报错,根源完全和你推测的一致——CairoSVG的url参数是专门用来处理网络URL或者标准的file协议路径的,直接喂Windows本地的C:\开头路径,它会把C当成一种未知的URL协议,自然就懵了。
给你几个亲测有效的解决方案,选哪个都行:
方案1:把本地路径转换成file协议URL
Windows路径要改成file:///开头的格式,注意把反斜杠换成正斜杠,还要加三个斜杠:cairosvg.svg2png(url=r'file:///C:/images/image.svg', write_to=r'C:\images\image.png')方案2:使用
file_obj参数直接读取本地文件
跳过URL解析这一步,直接打开SVG文件对象传给CairoSVG:with open(r'C:\images\image.svg', 'rb') as svg_file: cairosvg.svg2png(file_obj=svg_file, write_to=r'C:\images\image.png')方案3:读取文件字节内容用
bytestring参数
如果需要更灵活的处理,也可以先把SVG内容读成字节串再传入:with open(r'C:\images\image.svg', 'rb') as svg_file: svg_content = svg_file.read() cairosvg.svg2png(bytestring=svg_content, write_to=r'C:\images\image.png')
简单说就是别让CairoSVG把你的本地路径当成网络URL来解析,换个参数或者转成它能识别的file协议格式就搞定啦!
内容的提问来源于stack exchange,提问作者Laurengineer




