【问题标题】:matplotlib savefig in jpeg formatmatplotlib savefig 为 jpeg 格式
【发布时间】:2012-01-11 21:36:55
【问题描述】:

我正在使用 matplotlib(在 pylab 中)来显示数字。我想将它们保存为 .jpg 格式。当我简单地使用带有 jpg 扩展名的 savefig 命令时,它会返回:

ValueError: Format "jpg" is not supported.

Supported formats: emf, eps, pdf, png, ps, raw, rgba, svg, svgz.

有没有办法做到这一点?

【问题讨论】:

  • 您可以导出为 png,并使用 imagemagick 进行转换吗?
  • 与您的问题没有直接关系,但通常由 matplotlib 生成的线条艺术不适用于为模糊照片设计的 JPEG 格式使用的压缩算法。比较例如Yann 的答案或img.labnol.org/di/jpg_vs_png.png 中线条的清晰度
  • 对于显示点、线和/或曲线的图形,我总是使用矢量图形格式,如 eps、ps、pdf,我认为是 emf,而不是像 png 或 jpg 这样的光栅图形格式。这会产生可缩放的图形而不会造成分辨率损失和更小的文件大小。从 png 到 pdf,您可能会将图像大小从 400 kB 缩小到 40 kB。使用 emf 会得到类似的结果,并且 MS Office(如果你没有足够幸运使用 LaTeX)可以很好地处理 emf。

标签: matplotlib jpeg figure


【解决方案1】:

您可以将图像保存为“png”并使用 python 图像库 (PIL) 将此文件转换为“jpg”:

import Image
import matplotlib.pyplot as plt

plt.plot(range(10))
plt.savefig('testplot.png')
Image.open('testplot.png').save('testplot.jpg','JPEG')

原文:

JPEG 图像:

【讨论】:

  • python 映像库 (PIL) 在 Mac OS 上安装 python 2.7.2 并不是那么容易...它在谈论“错误 gcc-4.0...” :-(
【解决方案2】:

澄清和更新@neo 有用的答案和原始问题。一个干净的解决方案包括安装 Pillow,它是 Python Imaging Library (PIL) 的更新版本。这是使用

pip install pillow

安装 Pillow 后,标准的 Matplotlib 命令

import matplotlib.pyplot as plt

plt.plot([1, 2])
plt.savefig('image.jpg')

会将图形保存为 JPEG 文件,并且将不再生成 ValueError。

与@amillerrhodes 的回答相反,从 Matplotlib 3.1 开始,JPEG 文件仍然不受支持。如果我删除 Pillow 包,我仍然会收到有关不受支持的文件类型的 ValueError。

【讨论】:

  • 我有枕头和 png 工作正常。在 Enthought Canopy 中运行您的代码时,我收到错误“IOError: encoder error -2 when writing image file”。
  • @Keith matplotlib 开箱即用地支持 PNG 格式,无需 Pillow。这表明您的错误消息是由 Pillow 安装问题引起的。
  • 为了完整性:我使用Anaconda 分发版测试了上述命令在 Ubuntu Linux 和 Windows 下都能正常工作
【解决方案3】:

只需使用pip install pillow 安装枕头即可。

【讨论】:

    【解决方案4】:

    我刚刚在我的系统上将 matplotlib 更新为 1.1.0,现在它允许我使用 savefig 保存为 jpg。

    要使用pip 升级到 matplotlib 1.1.0,请使用以下命令:

    pip install -U 'http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.0/matplotlib-1.1.0.tar.gz/download'
    

    编辑(回复评论):

    pylab 只是将 matplotlib.pyplot 和 numpy 命名空间(以及其他一些命名空间)合并为一个命名空间。

    在我的系统上,pylab 是这样的:

    from matplotlib.pylab import *
    import matplotlib.pylab
    __doc__ = matplotlib.pylab.__doc__
    

    您可以看到 pylab 只是您的 matplotlib 安装中的另一个命名空间。因此,无论是使用pylab 还是matplotlib.pyplot 导入都没有关系。

    如果您仍然遇到问题,那么我猜测 macosx 后端不支持将绘图保存到 jpg。您可以尝试使用不同的后端。请参阅here 了解更多信息。

    【讨论】:

    • 我有 matplotlib 1.1.0。但我在 Mac 上导入 pylab,因此可能包含的 matplotlib 版本不是 1.1.0,但我不知道如何确定。
    【解决方案5】:

    如果你安装了 PIL,Matplotlib 可以直接透明地处理 jpg。你不需要调用它,它会自己做。如果 Python 找不到 PIL,就会报错。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 2012-10-15
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多