online jpg heic convertidor convert iphone ios cocoa-touch xamarin.ios uiimage

iphone - convertidor - heic to jpg windows



Detectar si un UIImage es PNG o JPEG? (2)

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

Lo que quiero lograr es obtener la matriz de bytes sin procesar ( byte[] ) de la imagen.

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

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

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

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


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) { }


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

Si es importante para su aplicación o algoritmo asegurarse de guardarlo como el formato original, creo que debe mantener esa información para usarla cuando la escriba. Revisé dos veces y no pude encontrar nada que anunciara de qué formato provino.

¿Va a cambiar la imagen a través de UIImageView o la imagen no cambia en su experiencia? Si no se modifica y solo necesita la interfaz de usuario para seleccionar la imagen, ¿podría obtener bytes de archivo? Por ejemplo, si mostró las imágenes solo para seleccionarlas y luego las cargó en un servidor o algo así, el UIImage solo podría ser para ver y seleccionar, y si su estructura de datos recuerda de qué archivo provino, podría recuperar los bits. disco y subir. Si está cambiando el archivo en la vista, entonces usted o el usuario deben decidir la salida (y si jpeg la calidad) de la imagen.