我正在编写一个应用程序,该应用程序从照片库中获取现有照片,删除GPS元数据,并使用新元数据写出照片副本。复制的照片在手机上的照片应用程序中以及OS X中的Preview.app中正确显示,但Image Capture.app显示的方向不正确。我无法弄清楚为什么会这样。
将原始照片和处理过的照片导入计算机并在Preview.app中打开它们会显示所有元数据都相同(除了缺少的GPS字典)。使用我的测试照片,预览表明原件和副本都有“方向:3(旋转180)”,而预览确实显示正确的方向。但Image Capture会将副本显示为颠倒,而原始显示正确。显然,我在代码中遗漏了什么,但是什么?这是从UIImagePickerController的resultBlock调用的代码:
// Make a copy of a photo, minus the GPS metadata tags.
- (void)copyPhoto:(ALAsset *)asset fromAssetsLibrary:(ALAssetsLibrary *)library
{
// Get the image's current metadata
ALAssetRepresentation *assetRepresentation = [asset defaultRepresentation];
NSDictionary *metadata = [assetRepresentation metadata];
NSMutableDictionary *mutableMetadata = [metadata mutableCopy];
// Remove the GPS tags
[mutableMetadata removeObjectForKey:@"{GPS}"];
// Write out a copy
[library writeImageToSavedPhotosAlbum:[assetRepresentation fullResolutionImage] metadata:mutableMetadata completionBlock:^(NSURL *assetURL, NSError *error) {
if (!error) {
NSLog(@"We wrote out a picture!");
}
}];
}
谢谢!
答案 0 :(得分:0)
图像以默认方向写入磁盘的原因是元数据中指定的实际方向,因此相机硬件可以快速连续拍摄多张照片并将其保存在瞬间附近,而无需每次都转换图像数据。 / p>
当您以编程方式将UIImage对象写入iOS Photo库时,我相信在将其写出之前,它会根据UIImage对象的imageOrientation属性将像素数据转换为正确的旋转。因此,当您调用writeImageToSavedPhotosAlbum:metadata:completionBlock:
时,它会将图像数据转换为正确的旋转,但您仍然使用现在无效的图像方向值提供原始元数据。
尝试剥离方向元数据以及GPS信息。