2014-12-04 26 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它不會返回零。