2012-01-12 24 views
15

現在、ALAsssetsLibraryを使用して写真を取得するアプリがあります。写真を画像ビューに置き、サーバーにアップロードすることができます。いくつかの写真を撮った後、実際のデバイスでテストしたところ、ポートレートで撮られるはずの写真が風景になっていることが分かりました。オリエンテーションはALAssetのPhotoで正しく動作しません

したがって、私はこのようなCGImageを取得するために別の関数を呼び出し:

UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage] scale:1.0 orientation:(UIImageOrientation)[representation orientation]]; 

試してみた、私はこれを使用し最初の:私は規模と方向との1が与えることができると思った

UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage]] 

写真が撮られた正しい向きを私に教えてください。しかし、それは私に正しい解決策を与えてくれませんでした。

写真の向きを正しく設定するために必要なことがありますか?

+1

この問題は、デバイスから取られた写真で発生します – Leena

答えて

44

正しい向きの取り扱いは、使用しているiOSのバージョンによって異なります。 iOS4とiOS 5では、サムネイルが既に正しく回転されているため、回転パラメータを指定せずにUIImageを初期化できます。 ただし、fullScreenImageの場合、動作は各iOSバージョンによって異なります。 iOS 5では、画像はiOS 4では既に回転しています。

だから、iOS4をであなたが使用する必要があります。

ALAssetRepresentation *defaultRep = [asset defaultRepresentation]; 
UIImage *_image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] 
                scale:[defaultRep scale] orientation:(UIImageOrientation)[defaultRep orientation]]; 

iOS5をで次のコードが正常に動作するはずです:

ALAssetRepresentation *defaultRep = [asset defaultRepresentation]; 
UIImage *_image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] scale:[defaultRep scale] orientation:0]; 

乾杯、

ヘンドリック

+0

私の場合、私はfullResolutionImageが必要で、iOS 6と7でテストしました。画像は自動的に回転されませんでしたが、最初のコード例はトリックです! ありがとうございました! S.メタデータを使用してイメージをファイルに保存する場合は注意してください。画像を回転させた場合は、EXIFの向きを0に設定して、奇妙な回転のjpegを避ける必要があります;) – Primoz990

+0

私のコメントを修正する必要があります。最初のコード例は私のfullResolutionイメージを回転させませんでした。私は自分自身でそれを回転させなければなりませんでした。 しかし、iOS 6および7でfullScreenImageが自動的に回転することに同意してください。 – Primoz990

+0

素晴らしい! iOS 7でもうまく動作します!どうもありがとう ! – Vinestro

4

は、このコードを試してください: -

UIImage* img = [UIImage imageWithCGImage:asset.thumbnail]; 
img = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation:UIImageOrientationUp]; 

これはあなたを助けるかもしれません。

+0

私はデバイスを所有していないので、今試すことはできません。その2行のコードを私に説明してもらえますか?最初の行のimgはアセットのサムネイルですが、実際のイメージは表示されません。 – LittleFunny

+0

私は画像のサムネイルを使用しており、画像の向きを上向きにしているので、私の場合には回転しません。 – Leena

+0

多分私は別の問題を抱えています...しかし、助けてくれてありがとうございます – LittleFunny

3

私の経験はに制限されていますIOS 5.xだが、サムネイル画像とフルスクリーン画像はプロ向けのものだと言える。ペリー。垂直に撮影したときに水平になるのはフル解像度画像です。

http://www.catamount.com/forums/viewtopic.php?f=21&t=967&start=0

それは、このようなUIImageに素敵な回転方法を提供:fullResolutionImageについては

 UIImage *tmp = [UIImage imageWithCGImage:startingFullResolutionImage]; 
     startingFullResolutionImage = [[tmp imageRotatedByDegrees:-90.0f] CGImage]; 
+0

私はちょうどfullresolutionイメージを使用し、それは私のために働いた。ありがとう。 – Ali

0

、私が好きな私のソリューションは、私はここからだuiimageのカテゴリを使用することです次のようにソリューションを提供するために、

ALAssetRepresentation *rep = [asset defaultRepresentation]; 

// First, write orientation to UIImage, i.e., EXIF message. 
UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage] scale:rep.scale orientation:(UIImageOrientation)rep.orientation]; 
// Second, fix orientation, and drop out EXIF 
if (image.imageOrientation != UIImageOrientationUp) { 
    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); 
    [image drawInRect:(CGRect){0, 0, image.size}]; 
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    image = normalizedImage; 
} 
// Third, compression 
NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 

imageDataは、あなたが望むものであり、ちょうどあなたの写真をサーバーにアップロードします。

ところで、EXIFが便利だと思うなら、それをあなたが望むようにnormalizedImageに補完することができます。

関連する問題