0

カメラロールに画像があります。画像とmd5チェックサムで合計するとデータ表現が得られます。画像をimg0.jpgとしてドキュメントディレクトリに書き込みます。元の画像を削除し、ALAssetLibraryのwriteImageDataToSavedPhotosAlbumを使用してデータ表現をカメラロールに書き戻します。

フォトアルバムを見ると、画像は同じように見えます。新しく保存した画像をカメラロールから再度読み取ります。

期待される結果-md5を計算します。実際の結果-異なるmd5。

このファイルとimg2.jpgを保存します

2つを16進ダンプして、違いを確認してください。

Dans-Mac:Desktop dan$ hexdump img1.jpg | head
0000000 ff d8 ff e1 26 31 45 78 69 66 00 00 4d 4d 00 2a
0000010 00 00 00 08 00 05 01 1a 00 05 00 00 00 01 00 00
0000020 00 4a 01 1b 00 05 00 00 00 01 00 00 00 52 01 28
0000030 00 03 00 00 00 01 00 02 00 00 02 13 00 03 00 00
0000040 00 01 00 01 00 00 87 69 00 04 00 00 00 01 00 00
0000050 00 5a 00 00 00 b4 00 00 00 48 00 00 00 01 00 00
0000060 00 48 00 00 00 01 00 07 90 00 00 07 00 00 00 04
0000070 30 32 32 31 91 01 00 07 00 00 00 04 00 00 00 00
0000080 a0 00 00 07 00 00 00 04 30 31 30 30 a0 01 00 03
0000090 00 00 00 01 00 01 00 00 a0 02 00 04 00 00 00 01

Dans-Mac:Desktop dan$ hexdump img2.jpg | head
0000000 ff d8 ff e1 26 31 45 78 69 66 00 00 4d 4d 00 2a
0000010 00 00 00 08 00 05 01 1a 00 05 00 00 00 01 00 00
0000020 00 4a 01 1b 00 05 00 00 00 01 00 00 00 52 01 28
0000030 00 03 00 00 00 01 00 02 00 00 02 13 00 03 00 00
0000040 00 01 00 01 00 00 87 69 00 04 00 00 00 01 00 00
0000050 00 5a 00 00 00 b4 00 00 00 48 00 00 00 01 00 00
0000060 00 48 00 00 00 01 00 07 90 00 00 07 00 00 00 04
0000070 30 32 32 31 91 01 00 07 00 00 00 04 00 00 00 01
0000080 a0 00 00 07 00 00 00 04 30 31 30 30 a0 01 00 03
0000090 00 00 00 01 00 01 00 00 a0 02 00 04 00 00 00 01

行0000070を見ると、最後の文字が異なります。これは一部の画像(ほとんど)で発生していますが、すべてがテストされているわけではありません。この特定のケースでは、ヘッダーの文字の違いは1つだけですが、テストされた他の画像は、多くのデータが異なるため、さらに悪化しました。

iOSで実際の画像データを汚染されていないフォトライブラリに書き込む方法はありますか?私のアプリケーションが行っていることでは、画像をフォトライブラリに保存した後、md5チェックサムが同じであることに依存しています。

4

2 に答える 2

1

Assets-Libray は、場合によっては画像にメタデータを追加します。私は、JPEG ファイルの場合、Assets-Library が JFIF-metadata-dictionary を追加することを確認しました (まだ存在しない場合)。これにより、ファイルのサイズが大きくなり、MD5-Check が失敗します。Assets-Library を使用してこれを防ぐ方法はありません。

ただし、アプリで JPEG のみを使用している場合は、目的を達成するための回避策があるかもしれません。

1) インポートする前に、ImageIO を使用して埋め込まれたサムネイル画像を抽出し、このチェックサムを生成します。

2) インポート後、Assets-Library から最初の 128KB (または 64KB でよい場合もあります) を読み取り、imageIO を使用してサムネイルを再度抽出します。次に、サムネイルのチェックサムを生成します。チェックサムが一致する場合は、同じイメージである必要があります。

于 2012-10-14T12:19:12.573 に答える
0

これを行うための信頼できる方法があるとは思いません。ギャラリーを使用して透明な PNG を保存しようとしたときに、PNG が電子メールからバッチで保存された場合、iOS によって jpeg に変換されました。次に、iCloud を使用してみましたが、PNG の元の形式を維持することに成功しませんでした。一定のものを探している場合は、URL から ID を抽出してみてください。そうすれば、たとえデータが変更されたとしても、少なくとも同じことを行っていることがわかります。

于 2012-10-03T15:07:46.170 に答える