2017-04-16 50 views
0

我遇到了一些問題,通過在圖像編輯器(Apple的Preview)中簡單地打開它們並將其保存回來,而不做任何明確的更改,從而能夠克服圖像文件*的損壞。如何使用python模仿在圖像編輯器中打開和保存圖像文件?

我有成千上萬的同樣損壞的圖像文件需要受到相同的程序。有沒有辦法讓它在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

+1

的商標SYS讀/寫不會改變任何東西。試着用像PIL這樣的Image模塊來做到這一點。 – stovfl

+1

這將有助於瞭解文件損壞的性質。你能發佈你的一個損壞的圖像嗎? –

+0

@ GlennRanders-Pehrson:腐蝕的性質在帖子結尾的帖子中解釋。 –

回答

1

您的示例文件https://i.stack.imgur.com/a5uXX.png實際上不是一個PNG文件。這是一個"CgBI" file,而這是一個由Apple X-code軟件創建的類似PNG的文件,可能使用他們的流氓「pngcrush」應用程序。從CgBI文件中恢復一個有效的PNG文件有多種方式(除了在不透明像素的基礎顏色值中不可避免地失去精度)。

  • 蘋果改性pngcrush本身就是恢復了「iPhone優化」

  • 有第三方應用程序,如公共領域,開源 pngdefry應用 ,可以發現的能夠 網絡上。

道歉不是你展示如何通過Python調用調用pngdefry或pngcrush,但希望這將設置你在正確的軌道上,並至少告訴你發生了什麼事您的文件。

法律聲明:我需要注意的是蘋果和iPhone 是Apple,Inc.的

+0

謝謝! pngdefry是否也存在非透明像素底層顏色值的精度損失問題? –

+1

是的,這是不可避免的。考慮alpha值爲0的任何顏色的像素(RGBA = {R,G,B,0})CgBI文件將將該像素表示爲RGBA = {0,0,0,0},並且底層顏色不可恢復地丟失。 –

相關問題