2 votes

Télécharger une image sur le serveur, recevoir une image tournée

Dans mon application, je veux télécharger l'image sur le serveur et récupérer l'URL de l'image téléchargée pour l'afficher dans l'application. J'envoie les données de l'image. Voici mon 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];
      }

Parfois, lorsque j'affiche l'image en récupérant l'URL de l'image, l'image est pivotée. Est-ce que je fais quelque chose de mal ?

7voto

Satish Azad Points 1383

Si vous capturez une image de l'appareil photo, générez une miniature de l'image dans l'orientation d'origine avant de télécharger l'image :

- (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:@"Orientation d'image invalide"]; 
            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;

}

Après cela, vous obtenez une image correcte, puis téléchargez cette image. J'espère que cela résoudra votre problème.

Étape 1 : capturer une image de l'appareil photo.

Étape 2 : Générer une miniature de la photo en suivant la méthode suivante

Étape 3 : Ensuite, téléchargez l'image résultante.

Vous obtiendrez une image correcte

0voto

Jay Q. Points 856

Cela a fonctionné pour moi lorsque j'utilisais des images de la bibliothèque de photos.

ALAssetRepresentation *rep = [_asset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
UIImage* img = [UIImage imageWithCGImage:iref scale:1.f orientation:UIImageOrientationUp]

Remarque : _asset est une instance de ALAsset.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X