将EMF / WMF文件转换为PNG / JPG

时间:2012-12-31 16:30:48

标签: python python-imaging-library

我收到带有Word docx文档的表单上传。我成功完成了所有解析。然后我必须在网上显示该Word文档。

我现在遇到的问题是我有嵌入的EMF文件(PIL库识别为WMF格式),我无法想象如何将它们转换为可在网络上显示的内容(任意选择) PNG)。

代码有点简单:

im = PIL.Image.open(StringIO.StringIO(data))
fmt = im.format
if (fmt == 'WMF'):
  fmt = 'PNG'
  output = StringIO.StringIO()
  im.save(output, format=fmt)
  data = output.getvalue()
  output.close()
return '''<img src="data:image/{0};base64,{1}" />'''.format(fmt, base64.encodestring(data))

我得到的错误是:

IOError: cannot find loader for this WMF file

这些Word文档来自普通用户,可能只是从网上剪切并粘贴图像或从文件中插入。

在linux系统上有解决方案吗?

感谢。

修改

为了我的辩护,我试图将该文档上传到谷歌驱动器,图像也不显示。也许没有简单的解决方案?

4 个答案:

答案 0 :(得分:2)

pip install Pillow

来自PIL导入图像

Image.open( “xxx.wmf”)。保存( “xxx.png”)

答案 1 :(得分:2)

我发现使用Wand包进行此类转换更容易。我尝试了以前的建议没有成功。所以这就是我所做的: (顺便说一下,我想把所有&#39; .wmf&#39;文件转换成pdf文件)

import os

from wand.image import Image as wima

folder='C:/Users/PythonLover/Pictures/pics'

for oldfilename in os.listdir(folder):

    if oldfilename.endswith(".wmf"):

        with wima(filename=folder+'/'+oldfilename) as img:

            newfilename = oldfilename.split('.')[0]+'.pdf'

            newfilename = folder+'/'+newfilename

            img.format = 'pdf'

            img.save(filename=newfilename)

答案 2 :(得分:1)

您可以使用libwmf将图片转换为SVG,然后pyrsvg转换为PNG (described in another question)

我没有找到libwmf项目网站,但Debian(和Ubuntu)的包libwmf-bin包含wmf2svg实用程序。

答案 3 :(得分:1)

你需要了解你正在处理的是什么,以便了解你为什么要做的事情是有问题的。 WMF文件(或更新的EMF和EMF +格式)要求Windows GDI呈现它描述的图像。因此,当您在Windows之外转换此格式时,没有简单的解决方案,因为您需要复制GDI API。

一种解决方案是使用unoconv工具,该工具依赖于OpenOffice / LibreOffice的UNO绑定。第二个解决方案是使用pyemf模块解码输入,然后第二个工具(由您完成)将渲染它。