在 Swift 中获取图像名称 UIImagePickerController
Get image name UIImagePickerController in Swift
我使用 UIImagePickerController 从 phone 库 (iOS) 获取图像。编辑模式后,我将图像放入我的 UIImageView。
我想将此图像保存在核心数据中,以便在另一个视图控制器中使用它
我怎样才能在 Swift 中做到这一点。
如果无法保存图片,我有哪些选择?
您可以使用二进制数据属性类型将图像存储在 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)
另一个不错的选择是您可以将图像保存到应用程序的文档目录中,然后您可以从任何地方检索该图像,如下面的代码所示:
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
}
希望对你有所帮助。
我使用 UIImagePickerController 从 phone 库 (iOS) 获取图像。编辑模式后,我将图像放入我的 UIImageView。 我想将此图像保存在核心数据中,以便在另一个视图控制器中使用它
我怎样才能在 Swift 中做到这一点。 如果无法保存图片,我有哪些选择?
您可以使用二进制数据属性类型将图像存储在 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)
另一个不错的选择是您可以将图像保存到应用程序的文档目录中,然后您可以从任何地方检索该图像,如下面的代码所示:
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
}
希望对你有所帮助。