ios - para - pasar whatsapp de iphone a android 2018 gratis
¿Cómo puedo obtener datos nsdata originales de uiimage? (2)
Puede usar ALAssetsLibrary
y ALAssetRepresentation
para obtener los datos originales. Ejemplo:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSURL *imageURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library assetForURL:imageURL resultBlock:^(ALAsset *asset) {
ALAssetRepresentation *repr = [asset defaultRepresentation];
NSUInteger size = repr.size;
NSMutableData *data = [NSMutableData dataWithLength:size];
NSError *error;
[repr getBytes:data.mutableBytes fromOffset:0 length:size error:&error];
/* Now data contains the image data, if no error occurred */
} failureBlock:^(NSError *error) {
/* handle error */
}];
}
Pero hay algunas cosas a considerar:
-
assetForURL:
funciona de forma asíncrona. - En el dispositivo, al usar
assetForURL:
generará un cuadro de diálogo de confirmación que podría irritar al usuario:
"Tu aplicación" quiere utilizar tu ubicación actual. Esto permite el acceso a la información de ubicación en fotos y videos.
- Si el usuario niega el acceso,
assetForURL:
llama al bloque de falla. - La próxima vez que use este método,
assetForURL:
fallará sin preguntar al usuario nuevamente. Solo si restablece las advertencias de ubicación en Configuración del sistema, se le vuelve a preguntar al usuario.
Por lo tanto, debe estar preparado para que este método falle y usar UIImageJPEGRepresentation
o UIImagePNGRepresentation
como una alternativa. Pero en ese caso no obtendrá los datos originales, por ejemplo, los metadatos (EXIF, etc.) faltan.
En mi aplicación, el usuario puede seleccionar una imagen del álbum o la cámara en la que pueda obtener una representación de uiimage. Como el álbum puede tener imágenes de la web, el tipo de archivo no es solo jpg. Entonces necesito enviarlo al servidor sin conversión. Aquí solo puedo usar nsdata.
Sé UIImageJPEGRepresentation y UIImagePNGRpresentación, pero creo que estos dos métodos pueden convertir la imagen original. ¿Tal vez cuando la calidad establecida en 1 UIImageJPEGRepresentation puede obtener una foto original?
¿Hay algún método para obtener el uiimage nsdata original?
En iOS 8.0+ use PHImageManager.default (). RequestImageData () después de localizar el activo correspondiente en los activos (puede acceder a los activos con PHAsset.fetchAssets ().
Ver más información y código de ejemplo en mi respuesta a una pregunta muy similar Cómo cargar una imagen que fue tomada de UIImagePickerController .