2012-09-27 51 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