convertir UIImage a NSData

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

Sin embargo, tengo una vista de image con una image. No tengo un file en appbundle pero tengo la image 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"]; 

Prueba uno de los siguientes, según el formatting de tu image:

UIImageJPEGRepresentación

Devuelve los datos para la image especificada en formatting JPEG.

 NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality ); 

UIImagePNGRepresentación

Devuelve los datos para la image especificada en formatting PNG.

 NSData * UIImagePNGRepresentation ( UIImage *image ); 

Aquí los docs .

EDITAR:

si desea acceder a los bytes sin formatting que componen el UIImage, puede usar este enfoque:

 CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage); NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider)); const uint8_t* bytes = [data bytes]; 

Esto le dará la representación de bajo nivel de los píxeles RGB de la image. (Omita el bit CFBridgingRelease si no está utilizando ARC).

 NSData *imageData = UIImagePNGRepresentation(myImage.image); 

Crea la reference de image …

 UIImage *rainyImage = [UIImage imageNamed:@"rainy.jpg"]; 

mostrando la image en la vista de la image … imagedisplay es reference de imageview:

 imagedisplay.image = rainyImage; 

NSData en NSData pasando la reference de UIImage y proporcione calidad de compression en valores flotantes:

 NSData *imgData = UIImageJPEGRepresentation(rainyImage, 0.9); 

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

Convierta su image usando UIImageJPEGRepresentation () o UIImagePNGRepresentation () así:

 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 subprocess, mostrando un UIActivityIndicatorView durante el process …

 //*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* }); }); 
 - (void) imageConvert { UIImage *snapshot = self.myImageView.image; [self encodeImageToBase64String:snapshot]; } call this method for image convert in base 64 -(NSString *)encodeImageToBase64String:(UIImage *)image { return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; } 

Solución en Swift 4

 extension UIImage { var data : Data? { return cgImage?.dataProvider?.data as Data? } }