[英]UIImagePickerController - how to save image to core data? (Swift)
[英]How to save an image picked from a UIImagePickerController in Swift?
我正在構建一個應用程序,讓用戶從其照片庫中選擇一個圖像。 我正在使用此代碼來保存它。
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
imgPicker.dismissViewControllerAnimated(true, completion: nil)
NSUserDefaults.standardUserDefaults().setValue(image, forKey: "bgImage")
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
imgPicker.dismissViewControllerAnimated(true, completion: nil)
}
我后來發現你無法使用NSUserDefaults保存圖像,但是你可以保存拾取圖像的路徑,保存並加載“if let ...”
但我不知道該怎么做(找到路徑並保存)。 這個想法是讓用戶選擇視圖背景圖像,有點像Whatsapp的作用。
如果我錯了而你無法存儲路徑,有沒有簡單的方法來保存所選圖像而不使用在線服務器?
您可以使用NSUserDefaults保存和檢索它:
//Save image
let img = UIImage() //Change to be from UIPicker
let data = UIImagePNGRepresentation(img)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "myImageKey")
NSUserDefaults.standardUserDefaults().synchronize()
//Get image
if let imgData = NSUserDefaults.standardUserDefaults().objectForKey("myImageKey") as? NSData {
let retrievedImg = UIImage(data: imgData)
}
或者您可以讀/寫文件,如果您願意:
//Save image
let img = UIImage() //Change to be from UIPicker
let data = UIImagePNGRepresentation(img)!
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
try data.writeToFile("\(documentsPath)myImage", options: [])
} catch {
print("Error")
}
//Get image
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let readData = try NSData(contentsOfFile: "\(documentsPath)myImage", options: [])
let retreivedImage = UIImage(data: readData)
}
catch {
print("Error")
}
斯威夫特3 :
//Save image
let data = UIImagePNGRepresentation(pickedImage)!
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
try data.write(to: URL(string: "\(documentsPath)/myImage")!, options: .atomic)
} catch {
print("Error")
}
//Get image
do {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let readData = try Data(contentsOf: URL(string: "\(documentsPath)/myImage")!)
let retreivedImage = UIImage(data: readData)
} catch {
print("Error")
}
有兩種方法,一種是你要描述的,但是非常混亂,我建議你采用圖像,轉換成圖像數據並將其存儲在本地應用程序中,就像在sqlite數據庫或用戶數組中一樣默認。 但是,在用戶默認值中保存那么多數據並不是一個好習慣。 所以,我會把它存儲在本地,我不會用凌亂的sqlite代碼,而是我會用核心數據。
class AddImageViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet var popUpThePickerButton: UIButton! //click on this button to appear the imagePicker
@IBOutlet var addPictureButton: UIButton! //when this button clicked saveImage method is called and there you save the imageData wherever you want
let picker = UIImagePickerController()
var selectedImage : UIImage!
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// when popUpThePickerButton is clicked
@IBAction func selectPictureFromPhotos(sender: UIButton) {
picker.editing = false
picker.sourceType = .PhotoLibrary
presentViewController(picker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
self.selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
dismissViewControllerAnimated(true, completion: nil)
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
// then save this image data in your database and when you want to show that image you can just turn the image data to image again
@IBAction func saveImage(sender: UIButton) {
let imageData = UIImagePNGRepresentation(self.selectedImage)
//save this image data in database
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.