2012-07-17 73 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

相關問題