2012-09-27 49 views
0

我在相機膠捲中有圖像。如果圖像和md5檢查對它進行求和,我會得到數據表示。 我們將圖像寫入文檔目錄爲img0.jpg 刪除原始圖像並使用ALAssetLibrary的writeImageDataToSavedPhotosAlbum將數據表示重新寫入相機膠捲。使用writeImageDataToSavedPhotosAlbum保存圖像會修改實際圖像數據

看看相冊和圖像看起來是一樣的。 再次從相機捲筒中讀取新保存的圖像。

預期結果 - 計算md5。 實際結果 - 不同的md5。

保存此文件以及img2.jpg

進制打印兩個和看看的區別:

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的最後一個字符是不同的。 這是發生在一些圖像(大部分),但不是全部測試。 在這種特殊情況下,標題中只有一個字符差異,但測試的其他圖像更糟糕,大量數據不同。

iOS上有什麼辦法可以將實際的圖像數據寫入照片庫嗎? 隨着我的應用程序正在做的事情,我將md5校驗和保存到照片庫之後是相同的。

回答

0

我不相信有一個可靠的方法來做到這一點。當我嘗試使用該庫來保存具有透明度的PNG時,如果PNG是通過電子郵件批量存儲的,則它們會被iOS轉換爲jpegs。然後我嘗試使用iCloud,但沒有成功保留PNG原始格式。如果你正在尋找一些不斷嘗試提取URL的ID。那麼至少你知道你正在使用同樣的東西,即使數據可能被改變。

1

Assets-Libray在某些情況下將元數據添加到圖像中。我觀察到,對於JPEG文件,Assets-Library會添加JFIF元數據字典(如果尚不存在)。這將導致文件的大小和MD5-Check失敗。 使用Assets-Library無法防止發生這種情況。

但是,如果您只在應用程序中使用JPEG,則可能會有解決方法來實現您的目標。

1)導入之前使用ImageIO提取嵌入的縮略圖圖像併爲此生成校驗和。

2)導入後,從Assets-Library中讀取第一個128KB(或64KB也可能正常),並使用imageIO再次提取縮略圖。然後爲縮略圖生成校驗和。如果校驗和匹配,它應該是相同的圖像。

+0

這幾乎是我採取的行動。將圖像寫回庫後,在完成處理程序中,我重新獲得對圖像的新引用,並且再次獲得md5。我是文件的第一個MB。使用md5的縮略圖根本不是一個壞主意,我將不得不測試下一次更新。 – dantastic