La façon la plus simple pour redimensionner une UIImage?
Dans mon iPhone, je prends une photo avec l'appareil photo, alors je veux la redimensionner à 290*390 pixels. J'ai été en utilisant cette méthode pour redimensionner l'image :
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Il fonctionne parfaitement, mais c'est un sans-papiers de la fonction, donc je ne peux plus l'utiliser avec l'iPhone OS4.
Alors... quel est le moyen le plus simple pour redimensionner une UIImage ?
- Le moyen de le faire en 2019, nshipster.com/image-resizing
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est de définir le cadre de votre
UIImageView
et définir lacontentMode
à l'une des options de redimensionnement.Ou vous pouvez utiliser cet utilitaire méthode, si vous avez réellement besoin de redimensionner une image:
Exemple d'utilisation:
newImage
sera autoreleased déjà, et il devrait en place de la méthode qui a appelé ce de le conserver ou non. Cette approche est juste la mendicité pour un mémoire de bug depuisinit
ne fait pas partie du nom de la méthode. Je m'attends à une méthode appelée comme ceci pour retourner un autoreleased objet.UIGraphicsBeginImageContextWithOptions
Voici la Swift version de Paul Lynch répondre
Swift version 3.0:
Bon Swift 3.0 pour iOS 10+ solution: à l'Aide
ImageRenderer
et de la fermeture de la syntaxe:Et voici l'Objective-C version:
Trevor Howard a quelques UIImage catégories que la poignée de redimensionnement tout à fait bien. Si rien d'autre, vous pouvez utiliser le code à titre d'exemples.
Remarque: Comme d'iOS 5.1, cette réponse peut-être pas valide. Voir le commentaire ci-dessous.
J'ai aussi vu de ce fait aussi bien (que j'utilise sur
UIButtons
Normale et à l'état Sélectionné depuis les boutons de ne pasresize
pour s'adapter). Le crédit va à celui qui l'auteur original a été.D'abord faire un vide .h et .m fichier appelé
UIImageResizing.h
etUIImageResizing.m
L'inclure .h fichier dans quoi que ce soit .m fichier que vous allez utiliser la fonction, puis l'appeler comme ceci:
Une version plus compacte pour Swift 4 et iOS 10+:
Utilisation:
Cette amélioration de Paul code vous donnera une forte haute résolution de l'image sur un iPhone avec un écran retina. Sinon, lors de la mise à l'échelle vers le bas est floue.
UIGraphicsBeginImageContextWithOptions
utilisera automatiquement l'écran principal de l'échelle (comme d'iOS 3.2).Voici une méthode simple:
resizedImage est une nouvelle image.
Voici une modification de la catégorie écrit par iWasRobbed ci-dessus. Il conserve les proportions de l'image d'origine au lieu de le dénaturer.
Si vous voulez juste une image plus petite et ne se soucient pas de la taille exacte:
L'échelle de réglage de
0.25f
vous donnera une 816 612 image à partir d'un appareil photo 8 mégapixels.Voici une catégorie UIImage+Échelle pour ceux qui en a besoin.
Solution Swift Tronçon de Remplissage, l'Aspect de Remplir et de l'Aspect Ajustement
et d'utiliser, vous pouvez effectuer les opérations suivantes:
Grâce à abdullahselek pour sa solution d'origine.
Pourquoi faire si compliqué? Je pense à l'aide de l'API système peut obtenir le même résultat:
Le seul piège est que vous devriez passer l'inverse de l'objectif d'un ratio comme deuxième argument, que, selon le document, le deuxième paramètre indique le ratio de l'image d'origine par rapport à la nouvelle grande échelle.
J'ai trouvé une catégorie pour UIImage en propre d'Apple exemples qui ne la même truc. Voici le lien: https://developer.apple.com/library/ios/samplecode/sc2273/Listings/AirDropSample_UIImage_Resize_m.html.
Vous aurez juste à modifier l'appel:
dans
imageWithImage:scaledToSize:inRect:
avec:Afin de considérer le canal alpha de l'image.
C'est une UIImage extension compatible avec Swift 3 et Swift 4 qui adapte l'image à la taille avec un rapport d'aspect
Exemple d'utilisation
scaledImage(with size:)
ouscaledWithSize(_:)
. AussiUIGraphicsGetImageFromCurrentImageContext
ne peut pas vraiment revenirnil
, donc!
marcherait aussi bien. Vous pouvez également simplifier rect création deCGRect(origin: .zero, size: size)
.Si vous voulez faire une miniature d'une UIImage (avec redimensionnement proportionnel ou peut-être un recadrage en cause), découvrez UIImage+Redimensionner catégorie qui vous permet d'utiliser concis, ImageMagick-syntaxe:
(Swift 4 compatible iOS 10+ et iOS < 10 de la solution (à l'aide de
UIGraphicsImageRenderer
si possible,UIGraphicsGetImageFromCurrentImageContext
contraire)Approche efficace sans étirement d'image Swift 4
//Appel de la méthode
Rogerio Chaves réponse rapide extension
Et aussi bonus
Swift 3.0 avec failsafe option (renvoie l'image d'origine en cas d'erreur):
Pour mes collègues Xamarians, voici une Xamarin.iOS C# version de @Paul Lynch réponse.
@Paul Lynch réponse est grande, mais il serait de changer le rapport de l'image.
si vous ne voulez pas changer le rapport de l'image, et que vous voulez encore la nouvelle image pour la nouvelle taille, essayez ceci.
utiliser cette extension
[cf Chris] Pour redimensionner à une taille souhaitée:
ou, de manière équivalente, substitut
CGImageGetWidth(...)/DESIREDWIDTH
Swift 2.0 :
Ici ma un peu bavard code Swift
guard
) à laaspectRatioAwareSize
fonction telle qu'il ne va pas faire une division par zéro exception si les paramètres d'entrée pour soit-image ou boxSize sontCGSize.zero
Swift 4 réponse:
The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.
J'ai découvert qu'il est difficile de trouver une réponse que vous pouvez utiliser out-of-the-box dans votre Swift 3 projet. Le principal problème de d'autre réponse qu'ils ne respectent pas le canal alpha de l'image. Voici la technique que j'utilise dans mes projets.
Exemple d'utilisation:
Ce code est une réécriture de Apple extension avec l'ajout du support pour les images avec et sans canal alpha.
Comme une nouvelle lecture, je vous recommandons de vérifier cet article pour image différentes techniques de redimensionnement. L'approche actuelle offre des performances décentes, il fonctionne de haut niveau de l'Api et facile à comprendre. Je recommande de s'y tenir, sauf si vous trouvez que le redimensionnement d'image est un goulot d'étranglement dans votre performance.