2017-10-29 3 views
-2

Wie kann ich ein Foto speichern? In swift Welcher Weg ist besser?Foto speichern nach URL

@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) 
    } 
} 

Antwort

0

Dies sollte für Sie arbeiten. Gebrauchte this answer von Leo Dabus für die getDataFromUrl Methode die Daten aus der URL zu erhalten:

Vergessen Sie nicht, den Schlüssel Privacy - Photo Library Additions Usage Description zu Ihrem Info.plist mit einer Beschreibung hinzuzufügen, um den Benutzer zu erklären, warum Sie Zugriff auf die Foto-Bibliothek benötigen.

enter image description here

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) 
      } 
     } 

    } 
} 
+0

Beachten Sie, dass eine JPEG-Datei Daten als PNG Speichern seiner Bildausrichtung info verwerfen würde. Btw die Methode sieht vertraut getDataFromUrl https://stackoverflow.com/revisions/aa305b0c-0b36-4c5d-a7f8-e0648d48b3c3/view-source –

+0

Verwenden Sie einfach die ursprünglichen JPEG-Daten 'unwrappedData'. Übrigens können Sie den Namen 'guard let data = data else {return}' behalten. und benutze 'data'' guard let image = UIImage (data: data) else {return} '. Sie sollten es nicht erneut komprimieren. 'UIImageWriteToSavedPhotosAlbum (image, nil, nil, nil)' –

+0

Danke für den Hinweis. Tatsächlich habe ich die Antwort verwendet, um dem OP zu helfen. Verknüpft die Antwort – ronatory

Verwandte Themen