为什么UIImagePickerController拍摄的照片有时会被错误裁剪?

6
有时使用UIImagePickerController从照片库中选择的图像被剪裁得与用户想要剪裁的方式不同。这在大约50个图像上传中发生一次。
当发生这种情况时,图像总是被剪裁为图像左上角的一部分。下面是一个示例图像,其中(1)显示了用户所选择的应该裁剪的区域,而(2)则是最终上传到服务器的图像。

enter image description here

(1)中的选择是假设性的,因为不知道用户确切地如何定位裁剪,并且尚未能够重现此错误的裁剪。这只在实时应用程序中观察到。一些用户尝试多次上传相同的图像,始终使用相同的错误裁剪,最终投诉,因此并不是用户故意这样裁剪图像。
一些用户尝试上传不同的图像,但所有图像都被错误地裁剪。
以下是代码(简化版,但图像不会发生更改):
class ImagePicker {

    private let imagePicker = UIImagePickerController()

    func showPicker() {
        imagePicker.sourceType = .PhotoLibrary
        imagePicker.mediaTypes = [kUTTypeImage as String]
        imagePicker.allowsEditing = true
        imagePicker.delegate = delegate
        imagePicker.modalPresentationStyle = .OverFullScreen
        parentViewController.presentViewController(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

        if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
            uploadImage(image)
        }
    
        picker.dismissViewControllerAnimated(true, completion: nil)
    }

    func uploadImage(image: UIImage) {

        let imageData = UIImageJPEGRepresentation(image, 0.75)!
        let imageFile = PFFile(name: "image.png", data: imageData)
        
        // Upload to Open Source Parse Server which stores the image in an Amazon S3 bucket.
        let imageObject = PFObject(className: "ImageClass")
        imageObject(imageFile, forKey: "imageFile")
        imageObject.saveInBackground()
    }
}

有人知道为什么会发生这种情况吗?

更新:

我在iPad上成功重现了这个问题,我会在这里更新结果。

更新:

该问题只出现在iPad上,因此可能与UIImagePickerViewController在裁剪图像时的一个漏洞有关。


遇到了同样的问题。你解决了吗?如果你能帮忙解决这个问题,将不胜感激。 - Ajay Gabani
@AjayGabani,你解决了这个问题吗?我也遇到过这个问题。 - Dmitriy Greh
@DmitriyGreh 我使用自定义裁剪工具来裁剪图像。这样做会更容易,耗时更少。 - Ajay Gabani
@Ajay Gabani,如果你感兴趣,我已经解决了!你可以在下面的评论中看到! - Dmitriy Greh
@DmitriyGreh 谢谢你的解决方案。下次我会使用它。 - Ajay Gabani
显示剩余2条评论
1个回答

0

我曾经遇到过同样的问题。在我的情况下,我通过更改imageView的内容模式来解决了这个问题,它被设置为“scaleAspectFill”。我只是把它删除了,然后我的图片就被正确裁剪了。


你的意思是在 UIImageView 中显示选取的图片?但在我的情况下,问题不在于这里,而是导致结果图像被错误地裁剪。而且似乎只在iPad上出现,所以我认为这是iOS的一个bug。也许这个问题在iOS 11中已经修复了? - Manuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接