Python PIL与矢量图形

Python PIL与矢量图形,python,svg,python-imaging-library,vector-graphics,eps,Python,Svg,Python Imaging Library,Vector Graphics,Eps,当我试图用PIL打开EPS或SVG图像时,遇到了几个问题 期初每股收益 结束于: 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python27\Lib\site packages\PIL\Image.py”,第1965行,打开 返回工厂(fp,文件名) 文件“C:\Python27\Lib\site packages\PIL\ImageFile.py”,第91行,在\uuu init中__ self._open() 文件“C:\Python27\Lib\site pac

当我试图用PIL打开EPS或SVG图像时,遇到了几个问题

期初每股收益

结束于:

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Python27\Lib\site packages\PIL\Image.py”,第1965行,打开
返回工厂(fp,文件名)
文件“C:\Python27\Lib\site packages\PIL\ImageFile.py”,第91行,在\uuu init中__
self._open()
文件“C:\Python27\Lib\site packages\PIL\EpsImagePlugin.py”,第206行,在打开时
raise IOError,“EPS标头错误”
IOError:错误的EPS标头
打开SVG也会以
IOError:无法识别图像文件
结束

问题是我必须在我的应用程序中支持这两种格式。转换为其他格式是没有选择的。我使用的是Windows7、Python2.7.2和PIL1.1.7


我上传了两个图像:和。

PIL
不支持
svg
,但您可以尝试一下,不幸的是,它似乎没有处于积极开发阶段:


    • 有PIL的替代品,但PIL的替代品不是你想要的——没有 据我所知,该库将透明地打开一个基于矢量的图形,并将其视为任何其他图像,而不是打开web浏览器并获取其渲染

      对于处理SVG,有一个使用Cairo的诀窍——它也可以处理许多其他格式,如果比PIL API更难处理的话——我认为Cairo也可以处理EPS——因此,在最坏的情况下,您可能可以使用pycairo或pycairo+PIL开发应用程序

      呈现SVG的方法如下所示:


      (请注意,您不必“将文件转换为PNG”-recibe显示如何渲染到cairo曲面,该曲面可以显示、保存到文件,等等)

      但是,Pillow支持EMF,它仍然是矢量图形。我在寻找将SVG转换为EMF的方便方法时偶然发现了这个线程。 最好使用Inkscape从SVG创建EMF:


      inkscape--file image.svg--export emf image.emf

      从今天起,即2017年7月,通过导入提供svg2png功能的cairosvg可以轻松完成svg文件的读取和转换


      此外,svglib开发再次启动,因此通过导入svglib和reportlab,从svg到png的转换也应该很容易。只需两次调用。

      PIL不支持SVG格式。EPS格式不完全受支持。看。那么,在python世界中有什么替代PIL的方法吗?幸运的是,svglib开发现在似乎又回来了。PyPI中当前的0.8.1版本支持Python 2.7和3.5。要添加这一答案,只需三个命令(加上导入):从io导入BytesIO之后,
      导入cairosvg
      从PIL导入图像中导入,
      ,只需运行
      out=BytesIO()
      cairosvg.svg2png(url='path/To/svg',write_To=out)
      image=image.open(out)
      经过大量搜索,我发现svglib和reportlab是最好的选择!使用pip安装,调用,它刚刚工作-可爱!谢谢
      from PIL import Image
      test = Image.open('test.eps')
      
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "C:\Python27\Lib\site-packages\PIL\Image.py", line 1965, in open
          return factory(fp, filename)
        File "C:\Python27\Lib\site-packages\PIL\ImageFile.py", line 91, in __init__
          self._open()
        File "C:\Python27\Lib\site-packages\PIL\EpsImagePlugin.py", line 206, in _open
          raise IOError, "bad EPS header"
        IOError: bad EPS header