微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift3 – swift拍照并保存到照片库

我一直在寻找,但无法找到答案.我有一个按钮“拍照”,当按下时,它打开相机,你拍照,当你选择“使用照片”,我希望它保存到照片库.
我可以做除了保存到图书馆以外的所有人,有人可以帮忙吗?

这是我打开相机的代码

enter image description here

解决方法

使用以下代码获取从照片库中拍摄的图像并保存在照片库中.

Code Support for Swift 3.1 & 4.0 version:

首先,我们必须在Project的.plist文件中进行权限设置: –

1)相机

<key>NSCameraUsageDescription</key>
<string>This app will use camera.</string>

2)图片

<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>

3)保存到照片库

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Please allow access to save photo in your photo library</string>

我们需要打开.pilst文件作为源代码类型,然后在里面添加权限 –

open .plist file

之后

import UIKit

class ViewController: UIViewController,UINavigationControllerDelegate,UIImagePickerControllerDelegate  {

    @IBOutlet weak var imageTake: UIImageView!

  var imagePicker: UIImagePickerController!
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //MARK: - Take image
    @IBAction func takePhoto(_ sender: UIButton) {
        imagePicker =  UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        present(imagePicker,animated: true,completion: nil)
    }

    //MARK: - Saving Image here
    @IBAction func save(_ sender: AnyObject) {
        UIImageWritetoSavedPhotosAlbum(imageTake.image!,self,#selector(image(_:didFinishSavingWithError:contextInfo:)),nil)
    }

    //MARK: - Add image to Library
    func image(_ image: UIImage,didFinishSavingWithError error: Error?,contextInfo: UnsafeRawPointer) {
        if let error = error {
            // we got back an error!
            let ac = UIAlertController(title: "Save error",message: error.localizedDescription,preferredStyle: .alert)
            ac.addAction(UIAlertAction(title: "OK",style: .default))
            present(ac,animated: true)
        } else {
            let ac = UIAlertController(title: "Saved!",message: "Your altered image has been saved to your photos.",animated: true)
        }
    }

    //MARK: - Done image capture here
    func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediawithInfo info: [String : Any]) {
         imagePicker.dismiss(animated: true,completion: nil)
        imageTake.image = info[UIImagePickerControllerOriginalImage] as? UIImage
    }

}

Swift 4.2 Code update –

class ViewController: UIViewController,UINavigationControllerDelegate  {

    @IBOutlet weak var imageTake: UIImageView!
    var imagePicker: UIImagePickerController!

    enum ImageSource {
        case photoLibrary
        case camera
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    //MARK: - Take image
    @IBAction func takePhoto(_ sender: UIButton) {
        guard UIImagePickerController.isSourceTypeAvailable(.camera) else {
            selectimageFrom(.photoLibrary)
            return
        }
        selectimageFrom(.camera)
    }

    func selectimageFrom(_ source: ImageSource){
        imagePicker =  UIImagePickerController()
        imagePicker.delegate = self
        switch source {
        case .camera:
            imagePicker.sourceType = .camera
        case .photoLibrary:
            imagePicker.sourceType = .photoLibrary
        }
        present(imagePicker,completion: nil)
    }

    //MARK: - Saving Image here
    @IBAction func save(_ sender: AnyObject) {
        guard let selectedImage = imageTake.image else {
            print("Image not found!")
            return
        }
        UIImageWritetoSavedPhotosAlbum(selectedImage,nil)
    }

    //MARK: - Add image to Library
    @objc func image(_ image: UIImage,contextInfo: UnsafeRawPointer) {
        if let error = error {
            // we got back an error!
            showAlertWith(title: "Save error",message: error.localizedDescription)
        } else {
            showAlertWith(title: "Saved!",message: "Your image has been saved to your photos.")
        }
    }

    func showAlertWith(title: String,message: String){
        let ac = UIAlertController(title: title,message: message,preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "OK",style: .default))
        present(ac,animated: true)
    }
 }

 extension ViewController: UIImagePickerControllerDelegate{

    func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediawithInfo info: [UIImagePickerController.InfoKey : Any]){
        imagePicker.dismiss(animated: true,completion: nil)
        guard let selectedImage = info[.originalImage] as? UIImage else {
            print("Image not found!")
            return
        }
        imageTake.image = selectedImage
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐