在服务器上上传图像,接收旋转的图像 [英] Uploading image on server, receiving rotated image

查看:139
本文介绍了在服务器上上传图像,接收旋转的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In my application I want to upload the image to the server and retrieve the url of uploaded image to display it in the application. I send the NSData of image. Here is my code :

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];
      }

有时当我显示图像时,通过获取图像的网址,图像旋转。我做错了吗?

Sometime when I display the image, by fetching the url of the image, the image gets rotated. Am I doing something wrong?

推荐答案

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

If you r capturing Image from Camera then before uploading image generate Image Thumbnail in original orientation by this:

- (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;

}

此后你得到一张正确的图片,然后上传那张图片。
我希望这能解决你的问题。

after this u get a correct image and then upload that image. I hope this will solve your issue.

Step1:从相机中捕捉图像。

Step1: capture image from camera.

Step2 :通过以下方法生成photoThumbnail

Step2: Generate photoThumbnail by following method

Step3:然后上传生成的图像。

Step3: Then upload the resultant image.

您将获得正确的图像

这篇关于在服务器上上传图像,接收旋转的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆