3

私はAGImagepickerContollerカメラロールから複数の画像を保存できるを使用しています、私はこの方法で保存していsuccessBlockます:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,    NSUserDomainMask ,YES );
    NSString *documentsDir = [paths objectAtIndex:0];
    NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%u.png", i]];

    ALAssetRepresentation *rep = [[info objectAtIndex: i] defaultRepresentation];
    UIImage *image = [UIImage imageWithCGImage:[rep fullResolutionImage]];

    //----resize the images
    image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)];

    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:savedImagePath atomically:YES];

私の問題は保存時であり、プレビューにロードされて使用されます。次のようになります。 ここに画像の説明を入力してください

私が欲しかったのは、プレビューで次のようにすることです。

ここに画像の説明を入力してください

アップロード後にこのiOSUIImagePickerControllerの結果画像の向きを読みました。

しかし、コードのどこに配置すればよいのかよくわかりません。誰かが私の問題を導いてくれることを願っています。ありがとうございました。

4

4 に答える 4

9

これがメソッドです。ポートレート画像を返す方向に関係なくUIImageを渡します

-(UIImage*)rotateUIImage:(UIImage*)src {

    // No-op if the orientation is already correct
    if (src.imageOrientation == UIImageOrientationUp) return src ;

    // We need to calculate the proper transformation to make the image upright.
    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
    CGAffineTransform transform = CGAffineTransformIdentity;

    switch (src.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, src.size.width, src.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;

        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, src.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;

        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, src.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationUpMirrored:
            break;
    }

    switch (src.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, src.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;

        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, src.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        case UIImageOrientationUp:
        case UIImageOrientationDown:
        case UIImageOrientationLeft:
        case UIImageOrientationRight:
            break;
    }

    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, src.size.width, src.size.height,
                                             CGImageGetBitsPerComponent(src.CGImage), 0,
                                             CGImageGetColorSpace(src.CGImage),
                                             CGImageGetBitmapInfo(src.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (src.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            // Grr...
            CGContextDrawImage(ctx, CGRectMake(0,0,src.size.height,src.size.width), src.CGImage);
            break;

        default:
            CGContextDrawImage(ctx, CGRectMake(0,0,src.size.width,src.size.height), src.CGImage);
            break;
    }

    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;
}
于 2013-03-19T06:12:52.607 に答える
4

そのカテゴリメソッドをインポートし、このようにサイズ変更する前に配置します。

image  = [self fixOrientation]; //Put it like this.    
image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)];

//画像のサイズを変更します

または、サイズ変更後に配置することもできます。

//----resize the images
image = [self imageByScalingAndCroppingForSize:image toSize:CGSizeMake(256,256*image.size.height/image.size.width)];
image  = [image fixOrientation]; //Put it like this.
于 2012-10-01T06:16:14.080 に答える
3

私の問題を完全に修正しました!

コードの1行をPNGからJPEGに変更するまで(元の向きのデータを保持しているようです)、ImageViewsで予期せず90度回転する画像の向きにも非常に不満を感じていました。

交換しました:

let data = UIImagePNGRepresentation(imageView.image!)

と:

let data = UIImageJPEGRepresentation(imageView.image!, 100)

TomaszNguyenMFMailComposeViewControllerの画像の向きによるこの関連する回答に100万人に感謝します

これが誰かを助けてくれることを願っています:)

于 2016-01-21T05:31:34.647 に答える
1
UIImage *temp = [UIImage imageWithCGImage:imgref scale:1.0f orientation:UIImageOrientationUp];
于 2012-10-01T06:24:54.043 に答える