2014-12-04 49 views
0

这是在尝试将图像保存到Parse.com后端的快速应用程序的上下文中 在该项目中,我将原始图像裁剪成方形:无法保存从CIImage和UIImage切换格式的裁剪图像

@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',原因:“莫非不保存文件数据 for image.png:(null)'

什么是奇怪的,并阻止我在这里,是在保存代码时,我取代裁剪容器dest.image!通过原始图像容器imageContainer.image !,它运行良好,但我们看到与println的图像存在和相似。

我的问题是:在作物过程中是否有某些东西阻止储蓄正常发生?

(请迅速回答)

回答

0

得到了解决办法。 原来,将图像转换为CIImage会导致问题。所以这必须避免。因此,我们将转换为CGImage,并使用另一种方法从矩形坐标裁剪。不仅转换回的UIImage(没有更多的无)时,它不会导致问题,它使代码更简单:

 //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它不会返回零。