iphone - 上传图像到服务器,接收旋转图像

标签 iphone ios6 image-uploading image-upload

在我的应用程序中,我想将图像上传到服务器并检索上传图像的 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;

}

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

第1步:从相机捕获图像。

Step2:通过以下方法生成照片缩略图

第三步:然后上传生成的图像。

您将获得正确的图像

关于iphone - 上传图像到服务器,接收旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14231552/

相关文章:

android - iPhone 有 9-patch 加载器吗?

iOS:setFrame 不再适用于 viewDidLoad 或 viewWillAppear

android - 无法从 Android Studio 中的图库中上传图像

ruby-on-rails - 如何在Rails中使用 "12 factor app"方式进行图像处理

ios - Xcode 6、iPhone 6 和 iPhone 4s 生成错误

ios - 自动续订的应用内购买订阅如何运作?

iphone - TableView :indexPathForCell returns nil

iphone - 如何使用iphone sdk将XML解析的图像放入数组并在所有 View Controller 中使用该数组

ios - xcode 4.5一些安装错误

android - 如何使用android捕获图像并存储在服务器上