Recortar UIImagePickerControllerOriginalImage usando UIImagePickerControllerCropRect devuelve una image incorrecta

Estoy intentando editar una image capturada y savela en la galería. Yo he hecho

UIImagePickerController *picker=[[UIImagePickerController alloc] init]; picker.allowsEditting=YES; 

Quiero save la image en la parte cuadrada editable y savela en la galería. Sé que puedo usar [info objectForKey:@"UIImagePickerControllerEditedImage"] para save la image editada. Pero esto siempre me devuelve una image de dimensión 320×320 (iPad Mini) y la image es de mala calidad. Así que [info objectForKey:@"UIImagePickerControllerOriginalImage"] recortar la image original [info objectForKey:@"UIImagePickerControllerOriginalImage"] usando el siguiente código:

 CGRect rect = [[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; UIImage *originalImage=[info objectForKey:@"UIImagePickerControllerOriginalImage"]; CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect); UIImage *result = [UIImage imageWithCGImage:imageRef scale:originalImage.scale orientation:originalImage.imageOrientation]; CGImageRelease(imageRef); 

Luego [info objectForKey:@"UIImagePickerControllerEditedImage"] tanto la image de resultado como la image editada ( [info objectForKey:@"UIImagePickerControllerEditedImage"] ). Cuando se comparan ambas imágenes, no combinan. Adjunto las imágenes editadas y recortadas. Mi objective final es recortar la image original en la image en la porción cuadrada editable y savela en la galería con buena calidad de image. ¿Alguien puede decirme qué sucede exactamente aquí y ayudarme a solucionar este problema?

Gracias por adelantado. imagen recortada

Imagen editada

Descubrí la razón por la cual el cultivo salió mal aquí. La image que devuelve UIImagePickerControllerOriginalImage se gira a -90 grados. Recortar en la image girada me devolvió una image recortada incorrecta. Así que giré la image a 90 grados y luego la recorté. Finalmente obtuve la image recortada esperada con buena calidad. El siguiente código resolvió mi problema.

  UIImage *originalImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; CGRect rect=[[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; UIImage *rotatedOriginalImage=[originalImage imageRotatedByDegrees:90.0]; CGImageRef imageRef = CGImageCreateWithImageInRect([rotatedOriginalImage CGImage], rect) ; UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 

código para rotar Imagen:

 - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees{ // calculate the size of the rotated view's containing box for our drawing space UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.height, self.size.width)]; CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; // Create the bitmap context UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); // Move the origin to the middle of the image so we will rotate and scale around the center. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); // // Rotate the image context CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); // Now, draw the rotated/scaled image into the context CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-self.size.height / 2, -self.size.width / 2, self.size.height, self.size.width), [self CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }