Convertir UIImage a NSData y convertir de nuevo a UIImage en Swift?


Estoy tratando de guardar un UIImage a NSData y luego leer el NSData de nuevo a un nuevo UIImage en Swift. Para convertir el UIImage a NSData estoy usando el siguiente código:

let imageData: NSData = UIImagePNGRepresentation(myImage)

¿Cómo convertir imageData (es decir, NSData) a un nuevo UIImage?

Author: Paulo Mattos, 2015-08-30

6 answers

UIImage(data:imageData,scale:1.0) suponiendo que la escala de la imagen es 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-30 14:43:40

Gracias. Me ayudó mucho. Convertido a Swift 3 y trabajado

Para guardar: let data = UIImagePNGRepresentation(image)

Para cargar: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-16 03:54:40

Uso imageWithData: método, que se traduce a Swift como 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-30 14:44:51

Para guardar como datos:

Desde StoryBoard, si desea guardar datos de "imagen" en ImageView de MainStoryboard, los siguientes códigos funcionarán.

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

Para cargar "image" a ImageView: Mira signo de exclamación"!", "?"de cerca si eso es lo mismo que éste.

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

El tipo"NSData" se convierte en tipo "Data" automáticamente durante este proceso.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-20 14:23:24

Ahora en Swift 4.2 puede usar pngData() nuevo método de instancia de UIImage para obtener los datos de la imagen

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-06 21:09:53

Para la ejecución segura del código, use if-let bloque con Data para evitar el bloqueo de la aplicación & , ya que la función UIImagePNGRepresentation devuelve un valor opcional.

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

Nota: Data es clase Swift 3+. Utilizar datos en lugar de NSData con Swift 3 +

Operaciones genéricas de imagen (como png y 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...
     }
}

Usando la extensión:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-21 04:32:00