Swift 2.0 Xcode 7.1 图像选择器前置摄像头图像在选择时旋转

Posted

技术标签:

【中文标题】Swift 2.0 Xcode 7.1 图像选择器前置摄像头图像在选择时旋转【英文标题】:Swift 2.0 Xcode 7.1 image picker front camera image rotated when picked 【发布时间】:2016-01-14 16:22:10 【问题描述】:

我有一个 tableview 显示带有 imageview 和标签的人。当一个人插入表格时,它可以从联系人中拉出,图像看起来很好。当未使用联系人添加人员时,它会从文本字段中提取姓名,并为相机显示图像选择器。如果我从后置摄像头拍照没有问题。如果我从前置摄像头拍摄照片,则照片会根据屏幕方向关闭。即使在拍照时屏幕没有旋转,它也会根据以下情况关闭:

如果方向是纵向,则图像旋转 180 度。 如果方向是向左横向,则图像向左旋转 90 度。 如果方向颠倒,图像向右旋转 90 度。 如果方向为横向,则图像很好。

这是我展示图像选择器的代码:

func pickImage()
    // create the alert controller, give it three actions: library, camera, cancel
    let pickerAlert = UIAlertController(title: "Add Pic?", message: "Would you like to add a picture for this person?", preferredStyle: .Alert)
    // create the library action
    let libAction = UIAlertAction(title: "Select photo from library", style: .Default)  (alert) -> Void in
        // set picker type to the library and present the picker
        self.picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        self.presentViewController(self.picker, animated: true, completion: nil)
    
    // if the camera is available on the device create the camera action and add it to the picker alert
    if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))
        let camAction = UIAlertAction(title: "Take a picture", style: .Default)  (alert) -> Void in
            // set picker type to the camera and present the picker
            self.picker.sourceType = UIImagePickerControllerSourceType.Camera
            self.picker.modalPresentationStyle = .FullScreen
            self.presentViewController(self.picker, animated: true, completion: nil)
        
        pickerAlert.addAction(camAction)
    
    // create the cancel action, set the person's image to contacts
    let cancel = UIAlertAction(title: "Don't Add Image", style: .Cancel, handler: nil)

    pickerAlert.addAction(libAction)
    pickerAlert.addAction(cancel)

    self.presentViewController(pickerAlert, animated: true, completion: nil)

这是我的 imagePicker 委托:(不包括 didCancel,它只是关闭了选择器)

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) 
    let imgData = UIImagePNGRepresentation(image)
    saveToList(personName, imgData: imgData!)
    self.tableView.reloadData()
    self.dismissViewControllerAnimated(true, completion: nil)

确定不是我将图像转换为 PNG 数据?这些方法也很基本。我在选择器上没有太多事情要做。保存到列表方法只是获取名称和图像数据并将其存储在我的数据模型中。当我在单元格中检索图像时,我使用该人的图像数据设置了 imageview 图像。我已经阅读了图像选择器的 Apple 文档,但似乎找不到我缺少的东西:-(

【问题讨论】:

如果使用 png 表示,则需要重新绘制图像。我建议使用 jpeg 表示来保持图像方向 是的,如果 jpeg 保持方向,则无需重绘图像。至少对于我的学习项目来说,没有特别需要将图像保存为 png。谢谢。 【参考方案1】:

替换 UIImagePNGRepresentation 并改用 UIImageJPEGRepresentation。 PNG 不会自动与方向信息一起保存。除非您正在制作照片质量必须完美的照片专用应用程序,否则 JPG 就可以了。

UIImageJPEGRepresentation 会要求提供图像数据,但也会要求CGFloat 设置压缩质量。从 0.0 到 1.0(最佳)。

祝你好运!

【讨论】:

我可能应该对 PNG 表示进行更多的自我研究。我只是不认为后置摄像头没有问题时会出现故障。感谢您的回答,JPEG 表示可以正常工作。

以上是关于Swift 2.0 Xcode 7.1 图像选择器前置摄像头图像在选择时旋转的主要内容,如果未能解决你的问题,请参考以下文章

日期选择器视图超小 - Swift Xcode

将 FBO 保存到相机胶卷后清理后崩溃错误? Swift 2.0 选择器语法

尝试使用 Photos Framework [Swift 2.0] 从 imagepickercontroller 检索 NSURL

使用 Swift 2.0 更新 UIButton 图像

Swift 2.0 在后台模式下在应用程序委托中播放自定义声音

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)