Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Redimensionner une UIImage

Compatible iOS 3. Cliquer pour en savoir plus sur les compatibilités.Par AliGator, le 15 décembre 2009

Je vous propose ici une méthode permettant de redimensionner une UIImage, ou plutôt de créer une version miniature d’une UIImage existante.

Le code source de cette catégorie est disponible ici (vous pouvez y télécharger un snapshot de la version actuelle si vous n’utilisez pas GIT).
Et voici aussi le snapshot du 2 juin 2010.
[EDIT du 02/06/2010] L'implémentation a été revue pour utiliser UIBeginGraphicsContext, plus simple que CGBitmapCreate et évitant d'avoir à gérer tous les cas possibles de combinaisons de colospaces, alphaInfo, bitsPerComponent, … qui étaient source d'erreur précédemment.

Comme cette fonctionnalité peut être utile à bien des sauces dans plusieurs de vos projets, j’ai codé cela sous forme d’une catégorie de la classe UIImage en question, ce qui permet d’utiliser les méthodes ci-dessous comme s’il s’agissait de méthodes natives de la classe UIImage fournie par Apple :

-(UIImage*)resizedImageToSize:(CGSize)dstSize;
-(UIImage*)resizedImageToFitInSize:(CGSize)boundingSize scaleIfSmaller:(BOOL)scale;

La première méthode redimensionnant à une taille fixée, quitte à déformer l’image puisqu’elle ne garde pas l’aspect ratio. La seconde méthode respecte l’aspect ratio puisqu’elle redimensionne l’image à la plus grande taille qui tienne dans boundingSize tout en respectant les proportions de l’image d’origine.


Exemple d’utilisation

Imaginez que vous avez une UIImage* bigImage et que vous voulez obtenir sa version réduite de sorte qu’elle tienne par exemple dans une UIView (de taille myUIView.bounds.size donc), vous pouvez l’utiliser comme ceci :

UIImage* smallImage = [bigImage resizedImageToFitInSize:myUIView.bounds.size scaleIfSmaller:NO];

Il faudra bien sûr avoir inclus « UIImage+Resize.h » et « UIImage+Resize.m » dans votre projet, et fait un #import « UIImage+Resize.h » dans le ou les fichiers dans le(s)quel(s) vous souhaitez utiliser ces méthodes resizedImageXXX…

NB : Ces méthodes prennent correctement en compte l’imageOrientation EXIF de l’image, en particulier si cette dernière est issue de la caméra de l’iPhone (UIImagePickerController)