¿Detectar si un UIImage es PNG o JPEG?

Actualmente estoy dando mis primeros pasos con el desarrollo de iPhone a través de MonoTouch, estoy jugando con un UIImage que leo en la biblioteca de fotos.

Lo que quiero lograr es get la matriz de bytes en bruto ( byte[] ) de la image.

Sé que hay envolturas UIImageJPEGRepresentation y UIImagePNGRepresentation en MonoTouch. También sé cómo usarlos. Lo que no sé es:

¿Cómo decido cuál de estas dos funciones debo llamar?

Es decir, si la image original es una image JPEG, no quiero getla como un PNG sino también como JPEG, y viceversa.

¿Hay alguna manera de hacer esto, o me estoy perdiendo algunos puntos en esto?

Una vez que tenga un UIImage , es capaz de producir un JPEG o PNG usando UIImageJPEGRepresentation o UIImagePNGRepresentation . El formatting de la image original solo es importante cuando se crea el UIImage a partir de él (decide qué proveedor de CFImage cargarlo).

Si es importante para su aplicación o algorithm para asegurarse de savelo como el formatting original, creo que debe mantener esa información para usar cuando la escriba. Comprobé dos veces y no pude encontrar nada que anunciase de qué formatting vino.

¿Vas a cambiar la image a través de UIImageView o la image no se modifica en tu experiencia? Si no ha cambiado y solo necesita la interfaz de usuario para seleccionar la image, ¿podría get bytes de file? Por ejemplo, si mostró las imágenes para seleccionarlas y luego las sube a un server o algo así, el UIImage solo podría ser para ver y seleccionar y si su estructura de datos restring de qué file provino, podría recuperar los bits disco y carga. Si cambia el file en la vista, entonces usted o el usuario deben decidir la salida (y, si es jpeg, la calidad) de la image.

PREPARAR

 typedef NS_ENUM(NSInteger, DownloadImageType) { DownloadImageTypePng, DownloadImageTypeJpg }; @property (assign, nonatomic) DownloadImageType imageType; 

DETECTAR

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString]; NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch]; if (pngRange.location != NSNotFound) { compareString = [compareString substringFromIndex:pngRange.location]; self.imageType = DownloadImageTypePng; NSLog(@"%@", compareString); } else { NSLog(@"Not PNG"); } NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch]; if (jpgRange.location != NSNotFound) { compareString = [compareString substringFromIndex:jpgRange.location]; self.imageType = DownloadImageTypeJpg; NSLog(@"%@", compareString); } else { NSLog(@"Not JPG"); } } 

UTILIZAR

 if (self.imageType == DownloadImageTypePng) { } else if (self.imageType == DownloadImageTypeJpg) { }