如何在图片编辑器中使用python模拟图片文件的打开和保存?

How to use python to imitate the opening and saving of an image file in an image editor?

我遇到了损坏的 .png 图像文件* 的某个问题,我可以通过简单地在图像编辑器(Apple 的 Preview)中打开它们并将它们保存回来来解决,而不用做任何显式更改。

我有数千个类似损坏的图像文件需要进行相同的处理。有没有办法在 python 中实现自动化?

以下天真的代码不起作用:

>>> with open('an_image.png', 'rb') as f:
...     data = f.read()  
... with open('an_image.png', 'wb') as f:
...     f.write(data)  

为什么这段代码不起作用?图像编辑器做了什么来纠正问题,我如何以编程方式模仿它?

我的操作系统是 macOS Sierra 版本 10.12.4。
我的 python 版本是 3.6.1.

Here 是损坏文件之一的示例。


* 有兴趣者,原问题描述here.

您的示例文件 https://i.stack.imgur.com/a5uXX.png, isn't actually a PNG file. It's a "CgBI" file 是由 Apple X-code 软件创建的类似 PNG 的文件,可能使用了他们的流氓 "pngcrush" 应用程序。有多种方法可以从 CgBI 文件中恢复有效的 PNG 文件(非不透明像素的基础颜色值中不可避免的精度损失除外)。

  • Apple修改的pngcrush本身就可以 恢复 "iPhone optimizations"

  • 有public域等第三方应用,开源 pngdefry申请 可以在网上找到。

很抱歉没有向您展示如何通过 python 调用调用 pngdefry 或 pngcrush,但希望这会让您走上正轨,并至少告诉您文件发生了什么。

法律声明:我需要注意 Apple 和 iPhone 是 Apple, Inc. 的注册商标