web-dev-qa-db-ja.com

PILとベクトルベースのグラフィック

EPSまたはSVGイメージをPILで開こうとすると、いくつかの問題が発生します。

EPSを開く

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

また、SVGを開くとIOError: cannot identify image fileで終わります。

問題は、アプリケーションで両方の形式をサポートする必要があることです。他の形式に変換することは代替手段ではありません。私はWindows7を使用しています、Python 2.7.2およびPIL1.1.7。

両方の画像をアップロードしました: [〜#〜] eps [〜#〜] および [〜#〜] svg [〜#〜]

12
floqqi

PILの代替手段はありますが、PILの代替手段は必要ありません-Webブラウザーを開いてそのレンダリングを取得する以外に、ベクターベースの図面を透過的に開き、他の画像と同じように扱うライブラリはありません。 。

SVGを処理するために、カイロを使用したレシピがあります。これは、他の多くの形式も処理できますが、PIL APIよりも処理が少し難しい場合は、カイロもEPSを処理できると思います。したがって、おそらく、 pycairoを使用したアプリ-または最悪の場合はpycairo + PIL。

SVGをレンダリングするためのレシピは次の答えにあります: PythonでSVGをPNGに変換する

(「ファイルをPNGに変換する」必要はないことに注意してください。レシブは、表示、ファイルへの保存などが可能なカイロサーフェスにレンダリングする方法を示します)

4
jsbueno

今日、つまり2017年7月の時点で、SVGファイルの読み取りと変換は、svg2png関数を提供するcairosvgをインポートすることで簡単に実行できます。

さらに、svglib開発が再開されているため、svglibとreportlabをインポートすることで、svgからpngへの変換も簡単になります。 2回の呼び出しの問題。

4
Alberto Vassena

それでも、PillowはEMFをサポートしていますが、これはまだベクターグラフィックです。とにかく、SVGをEMFに変換する便利な手段を探していたときに、このスレッドに出くわしました。最善を尽くします。賭けは、Inkscapeを使用してSVGからEMFを作成することです:

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

1
Guibod

PILsvgをサポートしていませんが、試してみることができます svglib which、 国連幸いなことに、 ない 活発に開発されているようです:

1
askewchan