[英]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.