[Objective-C] convertir UIImage a NSData


Answers

NSData *imageData = UIImagePNGRepresentation(myImage.image);
Question

Estoy usando este código en mi aplicación que me ayudará a enviar una imagen.

Sin embargo, tengo una vista de imagen con una imagen. No tengo ningún archivo en el paquete pero tengo la imagen en mi lado. ¿Cómo puedo cambiar el código a continuación? ¿Alguien puede decirme cómo puedo convertir myimage a NSData ?

// Attach an image to the email
NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy"];



Utilice if-let block con Data para evitar el bloqueo de la aplicación y la ejecución segura del código, 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: Los datos son clase Swift 3. Usa datos en lugar de NSData con Swift 3

Operaciones genéricas de imagen (como png y jpg ambas):

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

Al usar la extensión:

extension UIImage {

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

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



Si tiene una imagen dentro de UIImageView, por ejemplo, "myImageView", puede hacer lo siguiente:

Convierta su imagen usando UIImageJPEGRepresentation () o UIImagePNGRepresentation () de esta manera:

NSData *data = UIImagePNGRepresentation(myImageView.image);
//or
NSData *data = UIImageJPEGRepresentation(myImageView.image, 0.8);
//The float param (0.8 in this example) is the compression quality 
//expressed as a value from 0.0 to 1.0, where 1.0 represents 
//the least compression (or best quality).

También puede poner este código dentro de un bloque GCD y ejecutarlo en otro hilo, mostrando un UIActivityIndicatorView durante el proceso ...

//*code to show a loading view here*

dispatch_queue_t myQueue = dispatch_queue_create("com.my.queue", DISPATCH_QUEUE_SERIAL);

dispatch_async(myQueue, ^{ 

    NSData *data = UIImagePNGRepresentation(myImageView.image);
    //some code....

    dispatch_async( dispatch_get_main_queue(), ^{
        //*code to hide the loading view here*
    });
});



Links