【问题标题】:Swift 3 - How do I use a photolibrary picture in an app?Swift 3 - 如何在应用程序中使用照片库图片?
【发布时间】: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!)如果图片应该被用户删除,我会得到一个错误,但我希望为此构建一个解决方案(显示一个问号或其他东西)。这样用户就可以制作一张新照片。

标签: ios swift uiimagepickercontroller


【解决方案1】:

我找到的一个解决方案是使用 UIImageJPEGRepresentationUIImagePNGRepresentation 将图像转换为 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2013-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多