我为用户提供了从相机胶卷中挑选照片以上传到服务器的功能。
相机胶卷中的方向显示正确。
当我使用模拟器(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'模拟器附带的图像(因为我无法使用模拟器拍照)。
答案 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;
}