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.