En la aplicación que estoy desarrollando, estoy usando una imagen que el usuario elige de sus álbumes de fotos. Necesito subir una versión de alta resolución de esa foto a mi servidor.UIImagePickerControllerOriginalImage frente a los datos del activo original
estoy usando imagePickerController y he determinado que tengo 2 opciones
- uso UIImage de UIImagePickerControllerOriginalImage
- conseguir activo original mediante el uso de UIImagePickerControllerReferenceURL y ALAssetsLibrary assetForURL (no me gusta esto porque se le pide al usuario utilizar su ubicación actual, que no necesito)
Mi pregunta es ... ¿Hay alguna diferencia en la calidad de la imagen si utilizo la primera opción frente a la segunda?
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
//option 1
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
NSData *imgData = UIImagePNGRepresentation(image);
// option 2 (will prompt user to allow use of current location)
NSURL *imgURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"];
__block NSData* imgData;
ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];
[assetLibrary assetForURL:img resultBlock:^(ALAsset *asset)
{
ALAssetRepresentation *rep = [asset defaultRepresentation];
Byte *buffer = (Byte*)malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
imgData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];
}
failureBlock:^(NSError *err) {
NSLog(@"Error: %@",[err localizedDescription]);
}];
}
estoy usando la opción 2 sin permiso ubicación y es capaz de conseguir que una imagen. (Todavía no puedo usar ALAssetsLibrary para acceder a toda la biblioteca). Esto funciona en iOS 5 e iOS 6. –