将带有 exif 的图像转换为 NSData 类型

Posted

技术标签:

【中文标题】将带有 exif 的图像转换为 NSData 类型【英文标题】:Convert image with exif to NSData type 【发布时间】:2015-06-29 05:02:29 【问题描述】:

我有一个关于如何将带有 exif 数据的图像转换为 NSData 类型的问题。我获取图像而不是在相机中捕获图像或从相机胶卷中获取图像。

(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

选好图片后,我就到这里用exif把图片转换成NSData发送到服务器数据库。但是,我尝试了很多方法,但都失败了。当我在数据库中获取图片文件时,它丢失了图片的所有出口和元数据信息。

那么,我想问一下,有没有什么办法可以转换图片,并将exif和元数据保存在NSData类型中?

谢谢大家。

【问题讨论】:

【参考方案1】:

您可以这样做,但如果您不需要 NSData 进行进一步操作,我强烈建议您将图像保存在磁盘上:

            NSDictionary *metadata = [info objectForKey:    UIImagePickerControllerMediaMetadata];
            CFURLRef url = (__bridge_retained CFURLRef)[NSURL fileURLWithPath:path];
            CFMutableDictionaryRef metadataImage = (__bridge_retained CFMutableDictionaryRef) metadata;
            NSMutableData * destData = [NSMutableData data];   
            CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)destData,kUTTypeJPEG,1,NULL);
            CGImageDestinationAddImage(destination, uiImage.CGImage, metadataImage);
            if (!CGImageDestinationFinalize(destination)) 
                DLog(@"Failed to write image to %@", path);
            
            else 
                DLog(@"Writing image to %@", path);

            

【讨论】:

以上是关于将带有 exif 的图像转换为 NSData 类型的主要内容,如果未能解决你的问题,请参考以下文章

ALAsset 将资源转换为 NSData

如何将 UIImage 转换为 NSData 或 CFDataRef?

将 GIF 图像转换为 nsdata

如何检查在 NSData 中转换的媒体类型

将带有 Exif 信息的图像从 Windows Phone 发送到 Java 服务器

以哪种方式存储数据(图像)? NSData、字符串或可转换