【问题标题】:How can I save a figure in tiff with 600 dpi with compression using matplotlib?如何使用 matplotlib 将 600 dpi 的图形保存在 tiff 中并进行压缩?
【发布时间】:2018-03-06 10:55:45
【问题描述】:

最近,我决定从 MATLAB 移植到 Matplotlib 来绘制我的图表。在 MATLAB 中,我要做的就是转到 files>export>render,然后选择 600 dpi,然后选择 apply to figure,然后导出。在 Matplotlib 中,我使用 matplotlib 库中的命令 savefig 作为

matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w',
    orientation='portrait', papertype=None, format=None,
    transparent=False, bbox_inches=None, pad_inches=0.1,
    frameon=None).

然后我将 dpi 设置为 600,并将 .tiff 设置为输出格式。除了文件非常大〜32 mb之外,这很好用。很明显,我不能在期刊手稿中使用这么大的文件。我想知道是否有一种方法可以将压缩合并到文件中,以便可以在不损失分辨率的情况下获得更小尺寸的图像文件。

【问题讨论】:

  • 期刊需要*.tiff吗?也许您可以另存为矢量图形。根据您的绘图,文件大小可能会急剧减小。
  • 你为什么要调用savefig 并使用与默认值相同的参数?我可以看到你只是复制了文档字符串,只是没有意义。
  • @IgnacioVergaraKausel 就像我说的,我才刚刚开始使用 Matplotlib。我更改了,格式为“tiff”,dpi 为 600。
  • @Nohs 由美国机械工程师协会 (ASME) 出版的期刊要求提供 .tiff。那么我将使用 eps 格式并将其从 Scribus 或其他东西导入到 tiff 中。谢谢。

标签: python matplotlib


【解决方案1】:

matplotlib 3.1.0 版开始,现在可以使用directly pass parameters to PIL when saving a figure via the kwarg pil_kwarg

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

fig.savefig('/tmp/foo.tiff', dpi=600, format="tiff", pil_kwargs={"compression": "tiff_lzw"})

但要小心拼写错误,因为 savefig 似乎会默默吞下不受支持的 kwarg,例如pil_kwargssss...

该功能是在 this PR 中引入的,它取代了 PR linked by Ignacio Vergara Kausel in his response

【讨论】:

    【解决方案2】:

    截至目前,无法为tiff 格式添加压缩。有一个开放的issue 和一个工作的solution,但自去年五月左右以来一直没有看到进展。

    在工作解决方案中有一个建议的工作流程和报价

    ... 用 MPL 生成巨大的 TIFF 图像文件,然后将它们导入 PIL 中,保存 它们在 PIL 中使用 TIFF 压缩,然后丢弃 未压缩的 TIFF 文件。

    scikit-image 项目有一些 tiff 图像保存 functionality 压缩,它可能会根据您的用例对您有所帮助。

    该期刊很可能接受除tiff 之外的其他格式。然后,您可以选择 pngjpeg,其 DPI 为 600 基本上适用于所有期刊用途。

    【讨论】:

    • 听起来工作量很大。我将暂时坚持使用矢量图形。希望这个问题在不久的将来得到解决。谢谢。
    • 这不是很多工作,只是有点烦人。它可以是您整个图形处理序列的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2023-03-13
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多