【问题标题】:Best way to save photo from URL, swift [closed]从 URL 保存照片的最佳方法,快速 [关闭]
【发布时间】:2018-04-10 10:13:12
【问题描述】:

如何保存照片?迅速 哪种方式更好?

    @IBAction func savePhoto(_ sender: Any) {
        let imageData = UIImagePNGRepresentation(myImg.image!)
        let compresedImage = UIImage(data: imageData!)
        UIImageWriteToSavedPhotosAlbum(compresedImage!, nil, nil, nil)

        let alert = UIAlertController(title: "Saved", message: "Your image has been saved", preferredStyle: .alert)
        let okAction = UIAlertAction(title: "Ok", style: .default)
        alert.addAction(okAction)
        self.present(alert, animated: true)
    }   
}

【问题讨论】:

    标签: ios swift uiimage nsurl


    【解决方案1】:

    这应该适合你。使用来自Leo Dabusthis answer 用于getDataFromUrl 方法从URL 中获取数据:

    不要忘记将密钥 Privacy - Photo Library Additions Usage Description 添加到您的 Info.plist 中,并附上说明,向用户解释您需要访问照片库的原因。

    import UIKit
    
    class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
        @IBOutlet var imageView: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
    
        func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
            URLSession.shared.dataTask(with: url) { data, response, error in
                completion(data, response, error)
            }.resume()
        }
    
    
        @IBAction func savePhoto(_ sender: UIButton) {
    
            let yourImageURLString = "https://scontent-frx5-1.cdninstagram.com/t51.2885-15/e35/22794197_139950336649166_440006381429325824_n.jpg"
    
            guard let yourImageURL = URL(string: yourImageURLString) else { return }
    
            getDataFromUrl(url: yourImageURL) { (data, response, error) in
    
                guard let data = data, let imageFromData = UIImage(data: data) else { return }
    
                DispatchQueue.main.async() {
                    UIImageWriteToSavedPhotosAlbum(imageFromData, nil, nil, nil)
                    self.imageView.image = imageFromData
    
                    let alert = UIAlertController(title: "Saved", message: "Your image has been saved", preferredStyle: .alert)
                    let okAction = UIAlertAction(title: "Ok", style: .default)
                    alert.addAction(okAction)
                    self.present(alert, animated: true)
                }
            }
    
        }
    }
    

    【讨论】:

    • 请注意,将 JPEG 文件数据保存为 PNG 会丢弃其图像方向信息。顺便说一句,该方法看起来很熟悉 getDataFromUrl stackoverflow.com/revisions/…
    • 使用原始jpeg数据unwrappedData即可。顺便说一句,您可以保留名称guard let data = data else { return }。并使用dataguard let image = UIImage(data: data) else { return }。你不应该重新压缩它。 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
    • 感谢您的提示。事实上,我用答案来帮助 OP。链接答案
    • 再次感谢@LeoDabus
    • 只用一个守卫guard let data = data, let imageFromData = UIImage(data: data) else { return }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    相关资源
    最近更新 更多