15

私は現在、ALAsssetsLibrary を使用して写真を取得するアプリを持っています。写真を画像ビューに配置し、サーバーにアップロードできました。写真を撮って実機でテストしたところ、縦向きで撮ったはずの写真が横向きになってしまうことがわかりました。

したがって、次のように CGImage を取得するために別の関数を呼び出しました。

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

最初に試した、私はこれを使用しました:

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

縮尺と向きがあれば、写真が撮られた正しい向きを教えてくれると思いました。しかし、それは私に正しい解決策を与えませんでした。

写真の正しい向きを生成するために必要なものがありませんか?

4

4 に答える 4

45

正しい向きの処理は、使用している 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];

乾杯、

ヘンドリック

于 2012-02-25T19:48:39.723 に答える
3

私の経験は IOS 5.x に限られていますが、サムネイルとフルスクリーンの画像が適切な向きになっていると言えます。垂直に撮影したときに水平になるのはフル解像度の画像です。私の解決策は、ここから取得した uiimage のカテゴリを使用することです。

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

次のように、UIImage で素敵な回転メソッドを提供します。

        UIImage *tmp = [UIImage imageWithCGImage:startingFullResolutionImage];
        startingFullResolutionImage = [[tmp imageRotatedByDegrees:-90.0f] CGImage];
于 2012-03-29T20:09:47.153 に答える
0

についてfullResolutionImageは、次のように解決策を提供したいと思います。

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ます。

于 2016-02-19T09:19:10.383 に答える