ios - ubicacion - Superposición de cámara con foto de usuario no guardada como editada
poner fecha en fotos iphone 7 (1)
Estoy usando una imagen transparente con un recorte para que un usuario inserte / tome su propia imagen. Por alguna razón, al usar UIImagePickerControllerEditedImage
y recortar la foto tomada por el usuario, la imagen no se guarda como se editó; ver foto por ejemplo.
Mi problema es que la imagen no guarda exactamente cómo se editó la foto. (es decir, recortada / redimensionada).
Configurando el UIImagePicker
-(void)choosePhotoDialog:(id)sender
{
OverlayView * overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH_IPHONE, SCREEN_HEIGTH_IPHONE) andPhoto:[dict objectForKey:@"imageUrl"]];
[overlay setUserInteractionEnabled: NO];
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
[picker setSourceType: UIImagePickerControllerSourceTypeCamera];
[picker setDelegate: self];
[picker setAllowsImageEditing: YES];
[picker setShowsCameraControls: YES];
[picker setNavigationBarHidden: YES];
[picker setWantsFullScreenLayout: YES];
[picker setCameraOverlayView: overlay];
[self presentModalViewController:picker animated:YES];
[picker release];
}
Después de editar la imagen:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
SDWebImageManager * manager = [SDWebImageManager sharedManager];
UIImage * cachedImage = [manager imageWithURL: [NSURL URLWithString: @"http://www.someurl.com/test.png"]];
UIImage * userOriginal = [info valueForKey:UIImagePickerControllerEditedImage];
/* combining the overlay and the user-photo */
UIGraphicsBeginImageContext( CGSizeMake(640,960) );
/* for some reason I have to push the user-photo
down 60 pixels for it to show correctly as it
was edited.
*/
[userOriginal drawAtPoint:CGPointMake(0,60)];
[cachedImage drawAtPoint:CGPointMake(0,0)];
UIImage * draft = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum( draft, self, @selector(image:didFinishSavingWithError:contextInfo:), nil );
}
Además, hay espacios en blanco de la parte de "recorte" de edición, como se muestra a continuación:
Creo que esto se debe a que la foto editada no incluye las partes ocultas por la superposición de marcos semitransparentes que se muestra como parte del editor de imágenes estándar de iOS. (Los 60px que has encontrado que debes compensar son los 60px de la mitad superior de esta superposición).
Puede extraer y expandir la clave UIImagePickerControllerCropRect
del diccionario de info
y hacer la edición nuevamente en UIImagePickerControllerOriginalImage
para obtener la imagen resultante que desea.