2017-04-16 14 views
0

壊れた.pngイメージファイルで特定の問題が発生しました。画像エディタ(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 Version 10.12.4です。
私のpythonバージョンは3.6.1です。

Hereは、壊れたファイルの1つの例です。


※ご興味のある方は、元の問題はhereと記載されています。

+1

であることに注意することが必要としていますことは何も変わりません。 PILのような画像モジュールを使ってやってみてください。 – stovfl

+1

ファイルの破損の性質を知ることは役に立ちます。あなたの破損した画像の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を呼び出すために、うまくいけば、これは正しい軌道に乗ってあなたを設定し、少なくともあなたのファイルに何が起こったのかを教えてくれますどのように表示されていないため

謝罪。

法的事項:私はSYSは、読み取り/書き込みAppleとiPhone は、Apple、Inc.の登録商標です

+0

ありがとう! pngdefryには、不透明でないピクセルの基本的なカラー値の精度が失われるという問題もありますか? –

+1

はい、やむを得ないことです。アルファが0である任意の色のピクセルを考える(RGBA = {R、G、B、0})。CgBIファイルはそのピクセルをRGBA = {0,0,0,0}と表現し、その基礎となる色は回復不能に失われる。 –

関連する問題