ios - 保存后获取与PHAsset相同的NSData
问题描述
你知道有没有办法在保存PHPhotoLibrary
或不保存后获得相同的图像 NSData ( JPG , PNG )?
OfC,iOS会EXIF
在保存后修改一些元数据和->(时间戳,...)数据,但是,我问的是UIImage数据(包括相同的EXIF数据)。我没有将 exif 复制到我的代码中,但它不起作用,所以让我们讨论一下代码:
保存图像并获取哈希
UIImage * tmp = [[UIImage alloc] initWithData:tmpData];
tmpData =UIImageJPEGRepresentation(tmp, 1.0);
self.str1 = [tmpData MD5];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetResourceCreationOptions *options = [[PHAssetResourceCreationOptions alloc] init];
options.originalFilename = @"XXX";
PHAssetCreationRequest * createReq = [PHAssetCreationRequest creationRequestForAsset];
[createReq addResourceWithType:PHAssetResourceTypePhoto data:tmpData options:options];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
NSLog(@":%d",success);
}];
加载相同的图像:
[asset requestContentEditingInputWithOptions:0 completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
PHImageRequestOptions * option = [[PHImageRequestOptions alloc] init];
option.synchronous = YES;
option.version = PHImageRequestOptionsVersionOriginal;
option.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
option.resizeMode = PHImageRequestOptionsResizeModeNone;
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:option resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
UIImage * image = [UIImage imageWithData:imageData];
NSData * tmpDAt = UIImageJPEGRepresentation(image, 1.0);
NSString * md5 = [tmpDAt MD5];
if ([md5 isEqualToString:self.str1]) {
NSLog(@"My Expextation");
}
}];
我发现的有趣的事情是,如果我将图像裁剪以1*1
进行测试,我会JPEGDecompressSurface : Picture decode failed:
在保存过程中收到一些错误(
解决方案
我认为差异是由于您的 JPEG 在其 EXIF 元数据中具有不同的时间戳(可能还有其他差异)。
您是否尝试过使用UIImagePNGRepresentation
而不是UIImageJPEGRepresentation
?希望PNG表示将匹配。
推荐阅读
- python - 为什么在 2-D numpy 数组上执行 array[array%10] 返回 3-D 数组?
- r - 我应该在“某物”选项卡中替换什么以将文件加载到 R 中?
- python - 修正句子:在标点符号后加空格,但不能在小数点或缩写后加空格
- grafana - 启用“下载”选项 grafana 面板
- php - 在雪花中解析“stdClass”对象
- javascript - 发布到 App Store 后如何更改 Expo Managed 应用程序中的应用程序显示名称?
- python - 更改 DataFrame 中的值
- excel - 我想在输入的末尾添加一个 \
- html - 图标显示在 Chrome、FireFox 上,但不在 Safari 上,有什么线索吗?
- visual-studio - 在没有 Docker Compose 的情况下无法连接到容器化的 ASP.NET Core Web API