2016-06-24 2 views
3

Après avoir pris une photo à partir de la caméra dans les modes landscapeLeft et LandscapeRight, l'image est enregistrée en mode paysage. L'image du résultat est jointe.Comment rendre l'image toujours correcte?

Après mon code et toutes les choses que j'essayé:

J'utilise PHPhotoLibrary pour enregistrer l'image dans l'album personnalisé.

// Take Image Button Method 
- (void)snapButtonPressed:(UIButton *)button 
    { 
    [self.camera capture:^(LLSimpleCamera *camera, UIImage *image,   NSDictionary *metadata, NSError *error) 
     { 
     if(!error) 
      { 

     NSString * info = [NSString stringWithFormat:@"Size: %@ - Orientation: %ld", NSStringFromCGSize(image.size), (long)image.imageOrientation]; 
     NSLog(@"IMAGE Meta Data:%@",info); 

     [CustomAlbum addNewAssetWithImage:image toAlbum:[CustomAlbum getMyAlbumWithName:CSAlbum] onSuccess:^(NSString *ImageId) 
     { 
      NSLog(@"IMAGE ID:%@",ImageId); 
      recentImg = ImageId; 
     } 
      onError:^(NSError *error) 
     { 
      NSLog(@"probelm in saving image"); 
     }]; 
    } 
    else 
    { 
     NSLog(@"An error has occured: %@", error); 
    } 
} 
     exactSeenImage:YES]; 
} 
  • Liste item

enter image description here

+0

Vous devez conserver les informations exif des images d'origine, mais je n'ai trouvé aucune information à ce sujet concernant PHPhotoLibrary. Peut-être que vous avez plus de chance, maintenant que vous savez que le problème se situe dans la perte des informations de rotation exif. – mondjunge

+0

@mukesh est-ce que tu vérifies mon code? –

Répondre

0

J'utiliser cette méthode pour mettre en œuvre la rotation de l'image fixe, tout en capturer l'image de la caméra. Je pense que c'est utile pour vous.

- (UIImage *) fixrotation:(UIImage *)image { 


if (image.imageOrientation == UIImageOrientationUp) return image; 
CGAffineTransform transform = CGAffineTransformIdentity; 

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

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

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

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

    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, image.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, image.size.width, image.size.height, 
             CGImageGetBitsPerComponent(image.CGImage), 0, 
             CGImageGetColorSpace(image.CGImage), 
             CGImageGetBitmapInfo(image.CGImage)); 
CGContextConcatCTM(ctx, transform); 
switch (image.imageOrientation) { 
    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     // Grr... 
     CGContextDrawImage(ctx, CGRectMake(0,0,image.size.height,image.size.width), image.CGImage); 
     break; 

    default: 
     CGContextDrawImage(ctx, CGRectMake(0,0,image.size.width,image.size.height), image.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; 

}