Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用writeImageDataToSavedPhotosAlbum保存图像会修改实际图像数据_Ios_Alassetslibrary - Fatal编程技术网

Ios 使用writeImageDataToSavedPhotosAlbum保存图像会修改实际图像数据

Ios 使用writeImageDataToSavedPhotosAlbum保存图像会修改实际图像数据,ios,alassetslibrary,Ios,Alassetslibrary,我的相机里有一张照片。我得到的数据表示,如果图像和md5检查和它。 我们将图像作为img0.jpg写入文档目录 删除原始图像,并使用ALAssetLibrary的writeImageDataToSavedPhotosAlbum将数据表示写回相机卷 在相册中查看,图像看起来是相同的。 再次从相机卷读取新保存的图像 预期结果-匹配md5。 实际结果-不同的md5 将此文件与img2.jpg一起保存 将这两种方法进行比较,看看它们的区别: Dans-Mac:Desktop dan$ hexdump i

我的相机里有一张照片。我得到的数据表示,如果图像和md5检查和它。 我们将图像作为img0.jpg写入文档目录 删除原始图像,并使用ALAssetLibrary的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校验和保持不变。

我不相信有可靠的方法可以做到这一点。当我试图使用gallery以透明方式保存PNG时,如果PNG是从电子邮件中批量存储的,它们会被iOS转换成JPEG格式。然后我尝试使用iCloud,但没有成功地保留PNGs原始格式。如果您正在查找常量,请尝试从URL提取id。那么,即使数据可能会发生更改,至少你知道你正在使用相同的东西。

资产库在某些情况下会将元数据添加到图像中。我观察到,对于JPEG文件,资产库添加了一个JFIF元数据字典(如果还没有的话)。这将导致文件大小增加,MD5检查失败。 使用资产库无法防止这种情况发生

但是,如果你在应用程序中只使用JPEG,可能会有一个解决方法来实现你想要的

1) 导入之前,使用ImageIO提取嵌入的缩略图图像,并为此生成校验和


2) 导入后,从资产库中读回第一个128KB(或64KB也可以),然后使用imageIO再次提取缩略图。然后为缩略图生成校验和。如果校验和匹配,它应该是相同的图像。

这几乎就是我所做的。将图像写回库后,在完成处理程序中,我获得对图像的新引用,并再次使用md5。我正在md5中读取文件的第一个MB。使用md5的缩略图一点也不坏,我将在下一次更新中测试它。