繁体   English   中英

无法保存从CIImage和UIImage切换格式的裁剪图像

[英]Can't save cropped image that switched format from CIImage and UIImage

这是在一个快速应用程序试图将图像保存到Parse.com后端的情况下。在项目中,我将原始图像裁剪为方形图像:

    @IBOutlet weak var imageContainer: UIImageView! //Original image container
    @IBOutlet weak var dest: UIImageView! //Cropped image container

原始图像通过以下方式:

//Crop image
    let croppedImage = imageContainer.image
    let ciImage = CIImage(image: croppedImage)
    let ciImageCropped = ciImage.imageByCroppingToRect(grabberRectangleCoordinates)
    let finalImageToUIImage = UIImage(CIImage: ciImageCropped!)

    dest.image = finalImageToUIImage as UIImage!

当我将两个图像与println()进行比较时,我得到非常相似的结果:

//Cropped
Optional(<UIImage: 0x79e7a0b0> size {850, 850} orientation 0 scale 1.000000) 
//Original
Optional(<UIImage: 0x7992d390> size {1280, 850} orientation 0 scale 1.000000)

因此,您会看到两个图像确实存在并且相似。 我分别在各自的容器中的屏幕上看到它们。

不过,当我尝试保存以进行解析时:

    let user = PFUser.currentUser()
    let imageData = UIImagePNGRepresentation(dest.image!)
    let imageFile = PFFile(name:"image.png", data:imageData)
    var userEntry = PFObject(className:"Photos")
    userEntry["imageFile"] = imageFile
    //save code below but doesn't matter

它猛烈地崩溃,并显示错误消息:

由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“无法保存image.png的文件数据:(空)”

奇怪的是,在这里阻止我的是,当我替换裁剪好的容器dest.image时,在保存代码中! 通过原始图像容器imageContainer.image !,它可以正常工作,但是我们在println中看到两个图像都存在并且相似。

我的问题是:在播种过程中是否有某些事情会阻止保存正常进行?

(请迅速回答)

得到了解决方案。 原来将图像转换为CIImage会引起问题。 因此,必须避免这种情况。 因此,我们将改为转换为CGImage,并使用另一种方法从矩形坐标进行裁剪。 转换回UIImage时,它不仅不会引起问题(不再是nil),而且使代码更简单:

        //Crop image
        let croppedImage = imageContainer.image //Original image
        //CGImageCreateWithImageInRect is the function to create the cropped image. Must be a CGImage.
        let finalCroppedImage : CGImageRef = CGImageCreateWithImageInRect(croppedImage?.CGImage, grabberRectangleCoordinates)
        dest.image = UIImage(CGImage: finalCroppedImage)

您现在可以将dest.image保存到Parse.com中,并且不会返回nil。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM