使用ALAssetsLibrary的writeImageToSavedPhotosAlbum复制照片:metadata:completionBlock:更改图像方向

时间:2014-06-26 18:29:33

标签: ios objective-c alassetslibrary

我正在编写一个应用程序,该应用程序从照片库中获取现有照片,删除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!");
        }
    }];
}

谢谢!

1 个答案:

答案 0 :(得分:0)

图像以默认方向写入磁盘的原因是元数据中指定的实际方向,因此相机硬件可以快速连续拍摄多张照片并将其保存在瞬间附近,而无需每次都转换图像数据。 / p>

当您以编程方式将UIImage对象写入iOS Photo库时,我相信在将其写出之前,它会根据UIImage对象的imageOrientation属性将像素数据转换为正确的旋转。因此,当您调用writeImageToSavedPhotosAlbum:metadata:completionBlock:时,它会将图像数据转换为正确的旋转,但您仍然使用现在无效的图像方向值提供原始元数据。

尝试剥离方向元数据以及GPS信息。