在Swift中获取图像名称UIImagePickerController

时间:2015-06-20 10:42:47

标签: ios iphone xcode swift uiimageview

我使用UIImagePickerController从手机库(iOS)获取图像。编辑模式后,我把图像放到我的UIImageView。 我想将此图像保存在Core Data中,以便在另一个View Controller中使用它

我怎么能在Swift中做到这一点。 如果不可能有哪些选项可以保存图像?

2 个答案:

答案 0 :(得分:11)

另一个不错的选择是您可以将图像保存到应用的文档目录中,然后您可以从以下代码中显示的任何位置检索该图像:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    self.dismissViewControllerAnimated(true, completion: nil)
    let tempImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    // save your image here into Document Directory
    saveImage(tempImage, path: fileInDocumentsDirectory("tempImage"))

}

这是辅助函数:

func saveImage (image: UIImage, path: String ) -> Bool{

    let pngImageData = UIImagePNGRepresentation(image)
    //let jpgImageData = UIImageJPEGRepresentation(image, 1.0)   // if you want to save as JPEG
    let result = pngImageData.writeToFile(path, atomically: true)

    return result

}

// Get the documents Directory

func documentsDirectory() -> String {
    let documentsFolderPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as! String
    return documentsFolderPath
}
// Get path for a file in the directory

func fileInDocumentsDirectory(filename: String) -> String {
    return documentsDirectory().stringByAppendingPathComponent(filename)
}

这样您就可以从文档目录中检索该图像:

@IBAction func setImage(sender: AnyObject) {

    imageV.image = loadImageFromPath(fileInDocumentsDirectory("tempImage"))
}

这是辅助函数:

func loadImageFromPath(path: String) -> UIImage? {

    let image = UIImage(contentsOfFile: path)

    if image == nil {

        println("missing image at: (path)")
    }
    println("\(path)") // this is just for you to see the path in case you want to go to the directory, using Finder.
    return image

}

希望它会对你有所帮助。

答案 1 :(得分:0)

您可以使用二进制数据属性类型将图像存储在Core Data中。 然后将图像从选择器更改为NSData。

然后就像其他任何东西一样保存。

但是你应该知道一些事情:

始终将UIImage转换为NSData格式

如果遇到性能问题,请尝试将二进制数据属性移动到单独的实体。

您应该在NSManagedObject子类的接口后面将转换抽象为NSData,因此您不必担心从UIImage到NSData的转换,反之亦然。

如果您的图片与模型中的实体没有很强的相关性,我建议将它们存储在Core Data之外。

示例:

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){

    self.dismissViewControllerAnimated(true, completion: nil)

    newImageData = UIImageJPEGRepresentation(image, 1)

}

myImageFromData = UIImage(data: newImageData)