2012-07-17 74 views
4

我使用setImageData:metadata:completionBlock:ALAsset来更新资产的exif(元数据)。如何在不更改图像的情况下更新ALAsset的exif?

我只是想更新元数据,但这种方法需要一个imageData作为第一个参数。我使用下面的代码来生成imageData,但它修改了我的图像(我检查了文件大小和文件哈希)。

ALAssetRepresentation *dr = asset.defaultRepresentation; 
UIImage *image = [UIImage imageWithCGImage:dr.fullResolutionImage scale:dr.scale orientation:dr.orientation]; 
NSData *data = UIImageJPEGRepresentation(image, 1); 

有没有我可以用它来更新ALAsset刚EXIF任何其他方法?或以任何方式为方法setImageData:metadata:completionBlock:生成正确的imageData

回答

1

我找到了一种方法来生成imageData。下面的代码:

Byte *buffer = (Byte *)malloc(dr.size); 
NSUInteger k = [dr getBytes:buffer fromOffset:0.0 length:dr.size error:nil]; 
NSData *data = [NSData dataWithBytesNoCopy:buffer length:k freeWhenDone:YES]; 

所以我可以利用这些数据上面setImageData:metadata:completionBlock:只更新的ALAsset的EXIF。

+0

有人可以解释这是什么吗?这如何不更新图像? – akaru 2012-09-15 02:59:35

+0

@akaru,上面的代码在成为CGImage之前获取原始图像数据。当通过'setImageData:...'写入时,图像未被修改。 – 2013-01-09 03:55:30

相关问题