我在iOS 3.1.3 iPhone上测试我的iPhone应用程序 . 我正在使用 UIImagePickerController
选择/捕获图像:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
然后我在某个时候使用ASI类将它发送到我的Web服务器:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
问题:当我用iphone拍照同时保持它的风景时,图像会上传到服务器并且它会像你期望的那样被观看 . 当拍摄手机拍照时,图像会被上传并在旋转90度时被观看 .
我的应用程序设置为仅在纵向模式下工作(颠倒和常规) .
如何在上传后使图像始终显示正确的方向?
UIImageView中显示的图像看起来是正确的(在拍照后直接显示),但在服务器上查看则另有说明 .
15 回答
在迅速;)
更新SWIFT 3.0:D
UIImage
有一个属性imageOrientation
,它指示UIImageView
和其他UIImage
消费者旋转原始图像数据 . 这个标志很有可能被保存到上传的jpeg图像中的exif数据,但是用来查看它的程序并没有遵守该标志 .要在上传时旋转
UIImage
以正确显示,您可以使用如下类别:UIImage+fixOrientation.h
UIImage+fixOrientation.m
如果启用编辑,则编辑后的图像(与原始图像相对)将按预期方向定向:
启用编辑允许用户在点击“使用照片”之前调整图像大小并移动图像
基于_107931的答案更新Swift 3.1,代码清理 .
Picker委托方法示例:
如果我明白,你想要做的是忽视UIImage的方向?如果是这样,你可以这样做: -
或者在Swift中: -
它解决了我的裁剪问题..希望,这就是你要找的......
这是我找到的修复方向问题
EDIT:
这是@ an0的答案的Swift版本:
还有一个更通用的功能:
Swift 3版本:
我在设计拍摄照片的应用程序时使用了此页面,我发现以下方法将纠正方向并使用比以前的答案更少的内存和处理器:
这基本上只是用新方向重新拍摄实际图像数据 . 我正在使用@ an0的代码,但它在内存中创建了一个新图像,这可能会对您从相机获得的3264x2448图像造成负担 .
Solution for Swift 3.1 for orientation issue while capturing the image from Camera.
我已经更新了jake和Metal Heart给出的解决方案
UIImage extension
Swift 2.0
在您的代码中使用此UIImage扩展:
let fixOrientationImage=chosenImage.fixOrientation()
把它放在像这样的图像选择器的委托方法中
Swift 3.1
Swift 2.0
我想出了一个更简单的问题:
BTW:@ Anomie的代码不考虑
scale
,因此不适用于2x图像 .这是swift的UIImage扩展:
基于MetalHeart2003的早期工作..
这是基于@Anomie接受的答案的Swift 2中的UIImage扩展 . 它使用更清晰的开关盒 . 它还会考虑
CGBitmapContextCreateImage()
返回的可选值 .Swift 4.1版
@an0
的解决方案:基于@ jake1981的Swift 3版本是从@ MetalHeart2003中获取的
我从相机拍摄的图像或保存在相机胶卷中拍摄的照片都经历过这个问题 . 从safari浏览器下载到照片库中的图像在上传时不会旋转 .
我可以通过在上传之前将图像数据设置为JPEG来解决此问题 .
我们现在可以使用数据进行上传,上传后图片不会旋转 .
希望这会奏效 .