J'utilise le code suivant pour resize mon UIImagePickerController
.
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 71.0); //This slots the preview exactly in the middle of the screen by moving it down 71 points self.imagePicker.cameraViewTransform = translate; CGAffineTransform scale = CGAffineTransformScale(translate, 1.333333, 1.333333); self.imagePicker.cameraViewTransform = scale;
Ensuite, je prends la photo et la présente dans un UIImageView
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissViewControllerAnimated:NO completion:NULL]; _imageTaken = nil; _imageTaken = [info objectForKey:UIImagePickerControllerEditedImage]; if(_imageTaken==nil) { _imageTaken = [info objectForKey:UIImagePickerControllerOriginalImage]; } if(_imageTaken==nil) { _imageTaken = [info objectForKey:UIImagePickerControllerCropRect]; } [_imageTakenView setContentMode:UIViewContentModeScaleAspectFill]; if (_selfie) { UIImage * flippedImage = [UIImage imageWithCGImage:_imageTaken.CGImage scale:_imageTaken.scale orientation:UIImageOrientationLeftMirrored]; _imageTaken = flippedImage; } _imageTakenView.image = _imageTaken; }
Tout est bon jusqu'à présent. Ensuite, j'envoie l'image dans ma database en la convertissant en NSData
_imageData = [[NSData alloc] init]; _imageData = UIImageJPEGRepresentation(_image, .1);
Lorsque je charge datatables à partir du server et que je les présente dans un autre UIImageView
de la même taille, je définis le même rapport d'aspect:
[_imageViewToShow setContentMode:UIViewContentModeScaleAspectFill];
mais l'image semble déformée (écrasée horizontalement). Des idées pour savoir pourquoi cela pourrait être?
Convertir UIImage en NSData et save
_imageData = UIImageJPEGRepresentation(_image, .1); PFFile *imageFile = [PFFile fileWithName:@"image.png" data:_imageData]; newMessage[@"image"] = imageFile;
Problème:
Quand je télécharge à nouveau datatables, l'UIImage apparaît écrasé. Quand je regarde l'image sur ma database, ça me semble bien. Je ne sais pas pourquoi cela se passe …
Avant et après les images:
Essayez de normaliser l'orientation de l'image avant de la download. Cela permettra à l'image de fonctionner correctement même si les métadonnées sont perdues
Voici une catégorie pour le faire:
UIImage+OrientationFix.h
@interface UIImage (OrientationFix) - (UIImage*)imageByNormalizingOrientation; @end
UIImage+OrientationFix.m
@implementation UIImage (OrientationFix) - (UIImage*)imageByNormalizingOrientation { if (self.imageOrientation == UIImageOrientationUp) return self; CGSize size = self.size; UIGraphicsBeginImageContextWithOptions(size, NO, self.scale); [self drawInRect:(CGRect){{0, 0}, size}]; UIImage* normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return normalizedImage; } @end
Vous devrez juste appeler:
_imageTaken = [flippedImage normalizedImage];