Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get a correctly rotated UIImage from an ALAssetRepresentation?

I’m trying to get a correctly rotated UIImage from an ALAssetRepresentation using the fullScreenImage method. I have several testing photos shot in various device orientations; the photos show up correctly in the Photos app. The documentation for fullScreenImage says:

In iOS 5 and later, this method returns a fully cropped, rotated, and adjusted image—exactly as a user would see in Photos or in the image picker.

To create a correctly-rotated UIImage object from the CGImage, you use imageWithCGImage:scale:orientation: or initWithCGImage:scale:orientation:, passing the values of orientation and scale.

Given the docs, my code looks like this:

ALAssetRepresentation *rep = [asset defaultRepresentation];
UIImage *img = [UIImage
    imageWithCGImage:[rep fullScreenImage]
    scale:[rep scale]
    orientation:[rep orientation]];

But the resulting UIImage’s rotation is wrong. When I replace [rep orientation] with UIImageOrientationUp, the image is fine for all testing photos. Obviously I’m hesitating to stick with this “solution”, as it feels like a hack. What am I doing wrong?

like image 613
zoul Avatar asked Dec 20 '22 20:12

zoul


1 Answers

ALAssetRepresentation *rep = [asset defaultRepresentation];
UIImage *img = [UIImage
    imageWithCGImage:[rep fullScreenImage]
    scale:[rep scale]
    orientation:UIImageOrientationUp];

Is correct as under iOS 5 the fullscreenimages is already rotated (so it’s always “up”). Under iOS 4 the behaviour is different. Please see Orientation does not behave correctly with Photo in ALAsset for a more in depth explanation.

like image 55
holtmann Avatar answered May 16 '23 08:05

holtmann