PHImageManager返回设备上方向错误的图像

时间:2015-09-15 12:09:56

标签: ios ios8 xcode6

我为用户提供了从相机胶卷中挑选照片以上传到服务器的功能。

相机胶卷中的方向显示正确。

当我使用模拟器(iphone5,iphone6等等)时,一切都按预期工作,上传到服务器时照片的方向是正确的。

当我连接设备并选择照片时,图像始终朝向90 CCW。如果我在保存结果之前注销image.imageOrientation,我可以看到它的' 3'意思是UIImageOrientationRight。

有没有人知道为什么在设备上它的90 CCW和模拟器上是正确的?

这是我的代码:

(event.eventAttachments是一组PHAssets)

__block NSMutableArray *images = [[NSMutableArray alloc] init];

PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.networkAccessAllowed = YES;
options.synchronous = YES;

for(id asset in event.eventAttachments) {
  CGFloat scale = [UIScreen mainScreen].scale;
  CGSize targetSize = CGSizeMake(CGRectGetWidth([UIScreen mainScreen].bounds) * scale, CGRectGetHeight([UIScreen mainScreen].bounds) * scale);
  [[PHImageManager defaultManager] requestImageForAsset:asset
    targetSize:targetSize
    contentMode:PHImageContentModeAspectFit
    options:options
    resultHandler:^(UIImage *result, NSDictionary *info) {
    if (result) {
      NSMutableDictionary *imageDict = [[NSMutableDictionary alloc] init];
      [imageDict setObject:result forKey:@"image"];
      [imageDict setObject:[NSString stringWithFormat:@"image.jpg"] forKey:@"name"];
      [images addObject: imageDict];
    }
  }];

}

我NSLog image.UIImageOrientation我看到3.

编辑:想要补充一点,如果我使用我的设备,我会转到谷歌图片并下载随机图像,然后选择该图像的方向是正确的。

因此,对于使用设备拍摄的照片,方向只是错误的。因为模拟器我正在使用' stock'模拟器附带的图像(因为我无法使用模拟器拍照)。

1 个答案:

答案 0 :(得分:2)

我通过首先运行图像解决了我的问题:

- (UIImage *)normalizedImage: (UIImage *)image {
    if (image.imageOrientation == UIImageOrientationUp) return image;
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
    [image drawInRect:(CGRect){0, 0, image.size}];
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return normalizedImage;
}

Thanks to an0's answer here