How to get a correctly rotated UIImage from an ALAssetRepresentation?
alasset, alassetslibrary, ios, objective-c
Solution
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.
Problem
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?