Swift 3 - 如何在应用程序中使用照片库图片?
Posted
技术标签:
【中文标题】Swift 3 - 如何在应用程序中使用照片库图片?【英文标题】:Swift 3 - How do I use a photolibrary picture in an app? 【发布时间】:2017-01-08 19:12:05 【问题描述】:如何在我的应用中使用照片库中的图片?我已经完成了有关创建照片应用程序的教程。这一切都很好。我有一个UIPickerController
,可以用相机拍照,保存到库中,或者从库中选择一张图片,然后放到屏幕上。但是……
我想要的是用户选择一张图片,记住图片的名称或编号什么的,然后在另一个页面上使用库中的这张图片。
就像选择头像一样。将图片保存在某处,每当用户进入个人资料页面时,打开之前选择的头像图片。所以我需要的是图片的“名称”(表示),但我找不到。我该怎么做?
(下面的代码只是工作的cam / lib应用程序部分,但它保存了没有名称的图片,这就是问题:如何找出之前保存的图片?)抱歉,变量名是荷兰语。
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
@IBOutlet weak var plaatje: UIImageView!
@IBAction func saveknop(_ sender: UIButton)
let imageData = UIImageJPEGRepresentation(plaatje.image!, 0.6)
let compressedfoto = UIImage(data: imageData!)
UIImageWriteToSavedPhotosAlbum(compressedfoto!, nil, nil, nil)
saveNotice()
@IBAction func cameraknop(_ sender: UIButton)
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.camera
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
@IBAction func biepknop(_ sender: Any)
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary)
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = true
self.present(imagePicker, animated: true, completion: nil)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo image: UIImage!, editingInfo: [NSObject : AnyObject]!)
plaatje.image = image
self.dismiss(animated: true, completion: nil)
func saveNotice()
let alert = UIAlertController(title: "foto genomen", message: "je foto is bewaard in de biep", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(defaultAction)
present(alert, animated: true, completion: nil)
【问题讨论】:
P.S.我意识到(感谢 Jared!)如果图片应该被用户删除,我会得到一个错误,但我希望为此构建一个解决方案(显示一个问号或其他东西)。这样用户就可以制作一张新照片。 这就是答案吗? ***.com/questions/27854937/… 【参考方案1】:我找到的一个解决方案是使用 UIImageJPEGRepresentation 或 UIImagePNGRepresentation 将图像转换为 Data 对象。从那里您可以使用 write(to:) 方法将其保存到您希望应用使用的特定 URL。
this SO 问题的答案显示了几种存储图像的方法。这可能会有所帮助。
【讨论】:
【参考方案2】:我之前也遇到过同样的问题,这对我有用:
使用以下方法保存图片:
func saveImage(image: UIImage, path: String )
let pngImageData = UIImagePNGRepresentation(image)
do
try pngImageData?.write(to: URL(fileURLWithPath: path), options: .atomic)
catch
print(error)
使用以下方式加载保存的图像:
func loadImageFromName(name: String) -> UIImage?
let path = self.fileInDocumentsDirectory(filename: name)
let image = UIImage(contentsOfFile: path)
if image == nil
print("Image not available at: \(path)")
return image
func fileInDocumentsDirectory(filename: String) -> String
let documentsFolderPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as NSString
return documentsFolderPath.appendingPathComponent(filename)
像这样调用保存方法:
saveImage(image: image, path: fileInDocumentsDirectory(filename: "someId"))
祝你好运!希望这会有所帮助。
【讨论】:
【参考方案3】:在与建议的斗争中,我找到了另一种解决方案,它非常简单。但它有效!奇怪的。它不是最好的,但现在我会使用它,直到我了解 iPhone 上的目录和文件系统。
附:归功于:http://theswiftguy.com/index.php/2016/11/10/how-to-save-an-image-locally-in-xcode-8-swift-3-0/
//Encoding
let image = UIImage(named: "dog.png")
let imageData:NSData = UIImagePNGRepresentation(image!)! as NSData
//Saved image
UserDefaults.standard.set(imageData, forKey: "savedImage")
//Decode
let data = UserDefaults.standard.object(forKey: "savedImage") as! NSData
myImageView.image = UIImage(data: data as Data)
【讨论】:
以上是关于Swift 3 - 如何在应用程序中使用照片库图片?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中保存从 UIImagePickerController 中挑选的图像?
如何使用 Swift 3 从 Facebook SDK 下载照片?