Konwertuj UIImage na NSData i konwertuj z powrotem do UIImage w Swift?

Próbuję zapisać UIImage na NSData, a następnie odczytać NSData z powrotem do nowego UIImage w języku Swift. Aby przekonwertować UIImage na NSData używam następującego kodu:

let imageData: NSData = UIImagePNGRepresentation(myImage)

Jak przekonwertować imageData (tj. NSData) z powrotem na Nowy UIImage?

Author: Paulo Mattos, 2015-08-30

6 answers

UIImage(data:imageData,scale:1.0) zakładając, że skala obrazu wynosi 1.

 95
Author: algal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 14:43:40

Dzięki. Bardzo mi pomógł. Konwersja na Swift 3 i praca

Aby zapisać: let data = UIImagePNGRepresentation(image)

Do załadowania: let image = UIImage(data: data)

 46
Author: Ivan Sinigaglia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-16 03:54:40

Użycie imageWithData: metoda, która jest tłumaczona na Swift jako UIImage(data:)

let image : UIImage = UIImage(data: imageData)
 28
Author: dasblinkenlight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 14:44:51

Aby zapisać jako DANE:

Z StoryBoard, jeśli chcesz zapisać dane "obrazu" na imageView MainStoryBoard, następujące Kody będą działać.

let image = UIImagePNGRepresentation(imageView.image!) as NSData?

Aby załadować "image" do imageView: Spójrz na wykrzyknik"!", "?"dokładnie, czy to jest dokładnie to samo, co to.

imageView.image = UIImage(data: image as! Data)

Typ " NSData "jest automatycznie konwertowany na typ" Data " podczas tego procesu.

 5
Author: Munkh-Erdene Zorigbold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 14:23:24

Teraz w Swift 4.2 możesz użyć pngData() nowej metody instancji UIImage, Aby pobrać dane z obrazu

let profileImage = UIImage(named:"profile")!
let imageData = profileImage.pngData()
 3
Author: Sh_Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-06 21:09:53

Aby bezpiecznie wykonać kod, użyj if-let bloku z Data, Aby zapobiec awarii aplikacji&, ponieważ funkcja UIImagePNGRepresentation zwraca opcjonalną wartość.

if let img = UIImage(named: "TestImage.png") {
    if let data:Data = UIImagePNGRepresentation(img) {
       // Handle operations with data here...         
    }
}

Uwaga: Dane to klasa Swift 3+. Użyj danych zamiast NSData z Swift 3 +

Ogólne operacje na obrazach (jak png i jpg):

if let img = UIImage(named: "TestImage.png") {  //UIImage(named: "TestImage.jpg")
        if let data:Data = UIImagePNGRepresentation(img) {
               handleOperationWithData(data: data)     
        } else if let data:Data = UIImageJPEGRepresentation(img, 1.0) {
               handleOperationWithData(data: data)     
        }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
     if let image = UIImage(data: data) {
        // Use image...
     }
}

Za pomocą rozszerzenia:

extension UIImage {

    var pngRepresentationData: Data? {
        return UIImagePNGRepresentation(self)
    }

    var jpegRepresentationData: Data? {
        return UIImageJPEGRepresentation(self, 1.0)
    }
}

*******
if let img = UIImage(named: "TestImage.png") {  //UIImage(named: "TestImage.jpg")
      if let data = img.pngRepresentationData {
              handleOperationWithData(data: data)     
      } else if let data = img.jpegRepresentationData {
              handleOperationWithData(data: data)     
     }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
     if let image = UIImage(data: data) {
        // Use image...
     }
}
 2
Author: Krunal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 04:32:00