Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
825 views
in Technique[技术] by (71.8m points)

objective c - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...