Cela fait littéralement des jours que je frappe mon visage contre celui-ci et même si je sens constamment que je suis juste au bord de la révélation, je ne peux tout simplement pas atteindre mon objectif.
J'ai pensé, à l'avance dans les phases conceptuelles de ma conception, qu'il serait trivial de saisir une image de l'appareil photo ou de la bibliothèque de l'iPhone, de la réduire à une hauteur spécifiée, en utilisant une fonction équivalente à l' option Aspect Fill de UIImageView (entièrement dans le code), puis rognez tout ce qui ne rentre pas dans un CGRect passé.
Obtenir l'image originale de la caméra ou de la bibliothèque était trivial. Je suis choqué de voir à quel point les deux autres étapes se sont révélées difficiles.
L'image ci-jointe montre ce que j'essaie d'accomplir. Quelqu'un aurait-il la gentillesse de me tenir la main? Chaque exemple de code que j'ai trouvé jusqu'à présent semble briser l'image, être à l'envers, ressembler à de la merde, sortir des limites ou tout simplement ne pas fonctionner correctement.
la source
Réponses:
J'avais besoin de la même chose - dans mon cas, choisir la dimension qui correspond une fois mise à l'échelle, puis recadrer chaque extrémité pour adapter le reste à la largeur. (Je travaille en paysage, donc je n'aurais peut-être pas remarqué de lacunes en mode portrait.) Voici mon code - il fait partie d'une catégorie sur UIImage. La taille cible dans mon code est toujours définie sur la taille plein écran de l'appareil.
la source
Un article plus ancien contient le code d'une méthode pour redimensionner votre UIImage. La partie pertinente est la suivante:
En ce qui concerne le recadrage, je crois que si vous modifiez la méthode pour utiliser une taille différente pour la mise à l'échelle que pour le contexte, votre image résultante doit être découpée dans les limites du contexte.
la source
originalImage
. Merci.UIGraphicsBeginImageContextWithOptions(newSize, 1.0f, 0.0f);
. (expliqué ici: stackoverflow.com/questions/4334233/… )Je propose celui-ci. N'est-elle pas une beauté? ;)
la source
Il y a un bon morceau de code lié au redimensionnement des images + plusieurs autres opérations. Je suis venu autour de celui-ci en essayant de comprendre comment redimensionner les images ... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
la source
Voici. Celui-ci est parfait ;-)
EDIT: voir le commentaire ci-dessous - "Ne fonctionne pas avec certaines images, échoue avec: CGContextSetInterpolationQuality: erreur de contexte 0x0 non valide"
la source
Ceci est une version de la réponse de Jane Sales dans Swift. À votre santé!
la source
J'ai modifié le code de Brad Larson. Il remplira l'aspect de l'image dans le rect donné.
la source
La version Xamarin.iOS pour une réponse acceptée sur la façon de redimensionner puis de rogner UIImage (Aspect Fill) est ci-dessous
la source
J'ai converti le guide de Sam Wirch en swift et cela a bien fonctionné pour moi, bien qu'il y ait un très léger «écrasement» dans l'image finale que je n'ai pas pu résoudre.
Si quelqu'un veut la version objective c, c'est sur son site Web.
la source
J'ai trouvé que le Swift 3 publié par Evgenii Kanvets ne redimensionnait pas uniformément l'image.
Voici ma version Swift 4 de la fonction qui n'écrase pas l'image:
la source
UIGraphicsBeginImageContextWithOptions
mais d'autres fonctionnaient parfaitement. Merci!Le code simple suivant a fonctionné pour moi.
la source
UIImageView
objets. Cependant, cette question concerne la mise à l'échelle de l'UIImage
objet lui-même.alors vous pouvez prendre des captures d'écran de votre image par ceci
la source
Ci-dessous l'exemple de travail: Image de gauche - (image d'origine); Image de droite avec échelle x2
Si vous souhaitez mettre l'image à l'échelle tout en conservant son cadre (proportions), appelez la méthode de cette façon:
la source
Cette question semble avoir été mise au repos, mais dans ma quête d'une solution que je pourrais comprendre plus facilement (et écrite en Swift), j'y suis arrivé (également posté sur: Comment recadrer l'IUImage? )
Je voulais pouvoir recadrer à partir d'une région en fonction d'un rapport hauteur / largeur et redimensionner à une taille basée sur une étendue de délimitation externe. Voici ma variante:
Il y a quelques choses que j'ai trouvées déroutantes, les préoccupations distinctes du recadrage et du redimensionnement. Le recadrage est géré avec l'origine du rect que vous passez à drawInRect, et la mise à l'échelle est gérée par la partie de taille. Dans mon cas, je devais relier la taille du rect de recadrage sur la source, à mon rect de sortie du même rapport hauteur / largeur. Le facteur d'échelle est alors sortie / entrée, et cela doit être appliqué à drawRect (passé à drawInRect).
Une mise en garde est que cette approche suppose en fait que l'image que vous dessinez est plus grande que le contexte de l'image. Je n'ai pas testé cela, mais je pense que vous pouvez utiliser ce code pour gérer le recadrage / zoom, mais en définissant explicitement le paramètre d'échelle comme étant le paramètre d'échelle susmentionné. Par défaut, UIKit applique un multiplicateur basé sur la résolution de l'écran.
Enfin, il convient de noter que cette approche UIKit est de plus haut niveau que les approches CoreGraphics / Quartz et Core Image, et semble gérer les problèmes d'orientation de l'image. Il convient également de mentionner que c'est assez rapide, après ImageIO, selon ce post ici: http://nshipster.com/image-resizing/
la source
Version Swift:
la source
Voici une version Swift 3 du guide de Sam Wirch sur Swift posté par William T.
la source