Como faço uma cópia exata de um UIImage retornado de um UIImagePickerController?

Tenho necessidades divergentes com a imagem retornada da câmera do iPhone. Meu aplicativo reduz a imagem para upload e exibição e, recentemente, adicionei a capacidade de salvar a imagem no aplicativo Fotos.

No começo, eu estava atribuindo o valor retornado a duas variáveis separadas, mas descobriu-se que elas estavam compartilhando o mesmo objeto; portanto, eu estava obtendo duas imagens reduzidas em vez de uma em escala completa.

Depois de descobrir que você não pode fazerUIImage *copyImage = [myImage copy];, Fiz uma cópia usandoimageWithCGImage, por abaixo. Infelizmente, isso não funciona porque a cópia (aquicroppedImage) acaba girando 90º do original.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{   
    // Resize, crop, and correct orientation issues
    self.originalImage = [info valueForKey:@"UIImagePickerControllerOriginalImage"];
    UIImageWriteToSavedPhotosAlbum(originalImage, nil, nil, nil);
    UIImage *smallImage = [UIImage imageWithCGImage:[originalImage CGImage]]; // UIImage doesn't conform to NSCopy

    // This method is from a category on UIImage based on this discussion:
    // http://discussions.apple.com/message.jspa?messageID=7276709
    // It doesn't rotate smallImage, though: while imageWithCGImage returns
    // a rotated CGImage, the UIImageOrientation remains at UIImageOrientationUp!
    UIImage *fixedImage = [smallImage scaleAndRotateImageFromImagePickerWithLongestSide:480];
    ...
}

Existe uma maneira de copiar a imagem UIImagePickerControllerOriginalImage sem modificá-la no processo?

questionAnswers(5)

yourAnswerToTheQuestion