首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从电话库中选择全景图像时UIImagePickerController崩溃

尝试从电话库中选择全景图像时UIImagePickerController崩溃
EN

Stack Overflow用户
提问于 2016-01-27 20:48:09
回答 1查看 1.1K关注 0票数 2

我正在尝试使用UIImagePickerController从设备库中选择一个图像,除非我选择一个非常大的图像(全景图像),应用程序崩溃而不留下任何痕迹,否则一切正常。我认为这是一个内存问题(我注意到内存使用量正在增加到600米)。所以我的问题是,我可以指定一个图像大小作为一个过滤器吗?或者我应该创建我的自定义图像选择器?另外,我使用facebook和twitter图像选择器测试了同一张图片: twitter失败了.

我的代码启动图像选择器是:

代码语言:javascript
复制
var picker = UIImagePickerController()
picker.delegate = self
picker.sourceType = .PhotoLibrary
presentViewController(self.picker, animated: true, completion: nil)

并捕获选定的图像:

代码语言:javascript
复制
extension MYViewController : UIImagePickerControllerDelegate,UINavigationControllerDelegate{
    func imagePickerController(
    picker: UIImagePickerController,
    didFinishPickingMediaWithInfo info: [String : AnyObject])
    {
        print("user did select an image")
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage

        dismissViewControllerAnimated(true, completion: nil)

    }
    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        //do code when cancel
        print("cancel ...")
        userDidCancelImageChoosing = true
        dismissViewControllerAnimated(true, completion: nil)
    }
}

编辑:我检查了视频持续时间的问题,但不是我所需要的--我们没有同样的问题,这里我讨论的是从图片选择器中选择图像,您可以在twitter应用程序中尝试,并附上一个巨大大小的全景HQ图像。这个问题建议讨论限制录制视频的时间。

EN

回答 1

Stack Overflow用户

发布于 2018-07-17 14:48:54

应用程序由于Image.you的较大大小而崩溃,可以使用下面的function.This函数来调整图像的大小,从而返回图像。如果您想要数据,那么取消注释这两行,并返回数据而不是图像。

代码语言:javascript
复制
func compressImage(image:UIImage) -> UIImage {
    // Reducing file size to a 10th

    var actualHeight : CGFloat = image.size.height
    var actualWidth : CGFloat = image.size.width
    let maxHeight : CGFloat = 1136.0
    let maxWidth : CGFloat = 640.0
    var imgRatio : CGFloat = actualWidth/actualHeight
    let maxRatio : CGFloat = maxWidth/maxHeight

    if (actualHeight > maxHeight || actualWidth > maxWidth){
        if(imgRatio < maxRatio){
            //adjust width according to maxHeight
            imgRatio = maxHeight / actualHeight;
            actualWidth = imgRatio * actualWidth;
            actualHeight = maxHeight;
        }
        else if(imgRatio > maxRatio){
            //adjust height according to maxWidth
            imgRatio = maxWidth / actualWidth;
            actualHeight = imgRatio * actualHeight;
            actualWidth = maxWidth;
        }
        else{
            actualHeight = maxHeight;
            actualWidth = maxWidth;
            compressionQuality = 1;
        }
    }


    let rect = CGRect.init(x: 0.0, y: 0.0, width: actualWidth, height: actualHeight)

    UIGraphicsBeginImageContext(rect.size);


    image.draw(in: rect)
    let img = UIGraphicsGetImageFromCurrentImageContext();

    //        let imageData = UIImageJPEGRepresentation(img ?? UIImage.init(named: "imgPlaceHolder")!, compressionQuality);
    //
    //        UIGraphicsEndImageContext();
    //
    return img ?? image
}

使用此函数的代码

代码语言:javascript
复制
        picker.dismiss(animated: false, completion: {
            let img = self.compressImage(image: chosenImage)
            let cropViewController = TOCropViewController(image: img)
            cropViewController.delegate = self
            self.present(cropViewController, animated: false, completion: nil)

        })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35047690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档