使用Python/PIL读取SVG文件

6
我是一名新手Python程序员,请耐心指导。基本上我的脚本应该像这样运行:
1)加载图像并将其分成R、G、B通道 2)使用保存为svg文件的现有路径标记该图像的某个区域 3)对此区域的R、G、B值执行一些计算。 (根据计算结果进一步将图像发送到A或B文件夹)
我已经完成了1)和部分3),但我目前的问题是如何加载svg文件并将其应用于我的图像。 该图像是使用鱼眼镜头拍摄的照片。我只想获取实际照片的RGB值,而不是黑色背景。我通过使用GIMP绘制所需路径(不是圆形)来创建了svg文件。
我的问题是: 如何使用Python加载现有的svg文件(并将其读取为路径),并将该路径应用于图像?
我相信有一种简单的方法可以做到这一点,但我还没有找到它。
任何提示和建议都将不胜感激!
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
             `"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<svg xmlns="http://www.w3.org/2000/svg"
     width="22.2222in" height="16.6667in"
     viewBox="0 0 1600 1200">
  <path id="Auswahl"
        fill="none" stroke="black" stroke-width="1"
        d="M 848.00,103.21
           C 848.00,103.21 861.00,103.96 861.00,103.96
             891.77,105.30 921.91,109.93 952.00,116.58
             988.30,124.59 1023.25,137.24 1057.00,152.69
             1210.78,223.11 1322.55,368.09 1353.61,534.00
             1358.02,557.54 1361.00,581.11 1362.04,605.00
             1362.04,605.00 1363.00,616.00 1363.00,616.00
             1363.00,616.00 1363.00,649.00 1363.00,649.00
             1363.00,649.00 1362.04,662.00 1362.04,662.00
             1360.12,705.99 1352.05,749.92 1338.98,792.00
             1289.63,950.77 1167.62,1077.58 1011.00,1133.31
             962.90,1150.42 911.98,1160.82 861.00,1163.04
             861.00,1163.04 848.00,1164.00 848.00,1164.00
             848.00,1164.00 815.00,1164.00 815.00,1164.00
             815.00,1164.00 804.00,1163.04 804.00,1163.04
             756.47,1160.97 709.15,1151.72 664.00,1136.67
             608.47,1118.16 556.55,1090.63 510.00,1055.12
             469.68,1024.36 434.97,988.81 404.88,948.00
             288.05,789.50 269.64,577.90 355.26,401.00
             418.58,270.18 535.32,170.13 674.00,127.02
             700.27,118.86 729.73,111.96 757.00,108.28
             757.00,108.28 795.00,104.17 795.00,104.17
             795.00,104.17 809.00,103.21 809.00,103.21
             809.00,103.21 848.00,103.21 848.00,103.21 Z" />
</svg>

以下是图片链接: http://img153.imageshack.us/img153/5330/skybig.jpg

这段文字与IT技术无关,只是一个指向图片的链接。

如果您能共享一个示例图像和SVG文件,那么理解您的意图将更容易。在第三步中,您正在进行什么样的计算? - Offe
一个小更新:我没有找到使用PIL的方法,但是可以使用GIMP。 - seb
@seb 如果你找到了使用GIMP的方法,那就这样吧。你可以使用Python与GIMP进行接口交互,所以问题得到了解决(为什么要坚持使用不能解决你问题的工具呢?)。 - mmgp
2个回答

3
你需要将SVG文件转换为位图,然后使用PIL将其叠加到原始图像上,因为它不支持矢量图像。
我之前做了一些研究,发现在Python下唯一支持此功能的库是cairo(也许最近几个月关于SVG光栅化工具的情况有所改变)。
另一种方法是将原始位图图像应用为SVG图像的背景,但我认为这不符合你的要求,听起来很可怕...;-)

你如何将原始图像作为位图应用于SVG图像? - agconti

0

pip install svglib

在命令提示符中输入此命令,它将安装svglib。 一个纯Python库,用于读取和转换SVG。 阅读svglib的书籍或文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接