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 [〜#〜] 。
PILの代替手段はありますが、PILの代替手段は必要ありません-Webブラウザーを開いてそのレンダリングを取得する以外に、ベクターベースの図面を透過的に開き、他の画像と同じように扱うライブラリはありません。 。
SVGを処理するために、カイロを使用したレシピがあります。これは、他の多くの形式も処理できますが、PIL APIよりも処理が少し難しい場合は、カイロもEPSを処理できると思います。したがって、おそらく、 pycairoを使用したアプリ-または最悪の場合はpycairo + PIL。
SVGをレンダリングするためのレシピは次の答えにあります: PythonでSVGをPNGに変換する
(「ファイルをPNGに変換する」必要はないことに注意してください。レシブは、表示、ファイルへの保存などが可能なカイロサーフェスにレンダリングする方法を示します)
今日、つまり2017年7月の時点で、SVGファイルの読み取りと変換は、svg2png関数を提供するcairosvgをインポートすることで簡単に実行できます。
さらに、svglib開発が再開されているため、svglibとreportlabをインポートすることで、svgからpngへの変換も簡単になります。 2回の呼び出しの問題。
それでも、PillowはEMFをサポートしていますが、これはまだベクターグラフィックです。とにかく、SVGをEMFに変換する便利な手段を探していたときに、このスレッドに出くわしました。最善を尽くします。賭けは、Inkscapeを使用してSVGからEMFを作成することです:
inkscape --file image.svg --export-emf image.emf
PIL
はsvg
をサポートしていませんが、試してみることができます svglib
which、 国連幸いなことに、 ない 活発に開発されているようです: