iphone – 在服务器上传图像,接收旋转图像

在我的应用程序中,我想将图像上传到服务器并检索上传图像的URL以在应用程序中显示它.我发送图像的NSData.这是我的代码:

AsynchronousImageView *imgVw_User = (AsynchronousImageView*)[self.view viewWithTag:K_TagImageViewUser];
UIImage *UserImgForBioData = imgVw_User.image;
UserImgForBioData = [UIImage imageWithCGImage:UserImgForBioData.CGImage scale:1.0f orientation:UserImgForBioData.imageOrientation];
NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(UserImgForBioData,0.5)];

 Base64Transcoder *temp_transcoder=[[Base64Transcoder alloc]init];
NSString * temp_base64EncodedImage= @"";
if (imageData!=nil)
    {
        temp_base64EncodedImage = [NSString stringWithFormat:@"%@",[temp_transcoder base64EncodedStringfromData:imageData]];
       temp_base64EncodedImage = [[temp_base64EncodedImage stringByReplacingOccurrencesOfString:@"\n"
                                           withString:@""]
                                         mutableCopy];
      }

有时当我显示图像时,通过获取图像的URL,图像会旋转.难道我做错了什么?

如果你从相机捕获图像然后在上传图像之前生成图像缩略图的原始方向:

- (UIImage *)generatePhotoThumbnail:(UIImage *)image 
{
    //int kMaxResolution = 320; 

    CGImageRef imgRef = image.CGImage; 

    CGFloat width = CGImageGetWidth(imgRef); 
    CGFloat height = CGImageGetHeight(imgRef); 

    CGAffineTransform transform = CGAffineTransformIdentity; 
    CGRect bounds = CGRectMake(0, 0, width, height); 
    /*if (width > kMaxResolution || height > kMaxResolution) 
     { 
     CGFloat ratio = width/height; 
     if (ratio > 1)
     { 
     bounds.size.width = kMaxResolution; 
     bounds.size.height = bounds.size.width / ratio; 
     } 
     else
     { 
     bounds.size.height = kMaxResolution; 
     bounds.size.width = bounds.size.height * ratio; 
     } 
     } */

    CGFloat scaleRatio = bounds.size.width / width; 
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));  
    CGFloat boundHeight;                       
    UIImageOrientation orient = image.imageOrientation;                         
    switch(orient)
    { 
        case UIImageOrientationUp: //EXIF = 1 
            transform = CGAffineTransformIdentity; 
            break;

        case UIImageOrientationUpMirrored: //EXIF = 2  
            transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0); 
            transform = CGAffineTransformScale(transform, -1.0, 1.0); 
            break; 

        case UIImageOrientationDown: //EXIF = 3 
            transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height); 
            transform = CGAffineTransformRotate(transform, M_PI); 
            break; 

        case UIImageOrientationDownMirrored: //EXIF = 4 
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.height); 
            transform = CGAffineTransformScale(transform, 1.0, -1.0); 
            break; 

        case UIImageOrientationLeftMirrored: //EXIF = 5 
            boundHeight = bounds.size.height; 
            bounds.size.height = bounds.size.width; 
            bounds.size.width = boundHeight; 
            transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width); 
            transform = CGAffineTransformScale(transform, -1.0, 1.0); 
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0); 
            break; 

        case UIImageOrientationLeft: //EXIF = 6 
            boundHeight = bounds.size.height; 
            bounds.size.height = bounds.size.width; 
            bounds.size.width = boundHeight; 
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.width); 
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0); 
            break; 

        case UIImageOrientationRightMirrored: //EXIF = 7 
            boundHeight = bounds.size.height; 
            bounds.size.height = bounds.size.width; 
            bounds.size.width = boundHeight; 
            transform = CGAffineTransformMakeScale(-1.0, 1.0); 
            transform = CGAffineTransformRotate(transform, M_PI / 2.0); 
            break; 

        case UIImageOrientationRight: //EXIF = 8 
            boundHeight = bounds.size.height; 
            bounds.size.height = bounds.size.width; 
            bounds.size.width = boundHeight; 
            transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0); 
            transform = CGAffineTransformRotate(transform, M_PI / 2.0); 
            break; 
        default: 
            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"]; 
            break;
    } 

    UIGraphicsBeginImageContext(bounds.size); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft)
    { 
        CGContextScaleCTM(context, -scaleRatio, scaleRatio); 
        CGContextTranslateCTM(context, -height, 0); 
    } 
    else
    { 
        CGContextScaleCTM(context, scaleRatio, -scaleRatio); 
        CGContextTranslateCTM(context, 0, -height); 
    } 

    CGContextConcatCTM(context, transform); 

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef); 
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return imageCopy;

}

在此之后,您获得正确的图像,然后上传该图像.
我希望这能解决你的问题.

第一步:从相机中捕捉图像.

Step2:按照以下方法生成photoThumbnail

Step3:然后上传结果图像.

你会得到正确的形象

https://stackoverflow.com/questions/14231552/uploading-image-on-server-receiving-rotated-image

转载注明原文:iphone – 在服务器上传图像,接收旋转图像