Objectif C: Comment fixer le ratio d'aspect de l'image (et de ne pas modifier pour l'adapter à imageview image)
Je suis en utilisant le UIImagePickerController pour sélectionner des images pour mon application. Cependant, je suis confronté à certains défis en ce qui concerne à maintenir le ratio d'aspect des images sélectionnées
Par exemple,
J'ai une image raw sur le téléphone comme suit (pas d'image carrée):
Après la sélection de l'image sur l'iphone via l' " de se déplacer et d'échelle de la page pour recadrer l'image, le résultat est comme suit: (rapport d'aspect est encore le cas ici)
Mon application affiche l'image sélectionnée dans un UIImageView avec un cadre carré (200 x 200). Après le réglage de l'image sélectionnée à l'UIImageView (UIImageView.image = selectedImage), le format de l'image n'est pas maintenue, mais plutôt suivie le cadre de la UIImageView: (L'image semble biaisée maintenant dans mon UIImageView):
Est-il un moyen de maintenir le ratio d'aspect de l'image dans ce cas?
EDIT: mise à Jour résultat attendu
Après réflexion, je me rends compte que la meilleure façon de résoudre mon problème est de s'assurer que de telles images (non carré), j'ai besoin de les "convertir" en images carrées c'est à dire remplir les espaces vides en haut et en bas des images pour en faire un carré par exemple
Attendus de l'image: (avec le haut et le bas frontières)
EDIT: mise à Jour avec des exemples de code
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo
{
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
self.imageView.image = image;
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
//Compress image
UIImage *image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];
self.imageData = UIImageJPEGRepresentation(image, 0.75);
}
En ajoutant le code "auto.imageView.contentMode = UIViewContentModeScaleAspectFill;", j'ai pu obtenir la place de l'image dans le uiimageview
Mais il semble que l'image d'origine n'est toujours pas une image carrée, d'où le problème de l'inclinaison en aura encore quand je fais "UIImage *image = [self scaleImage:img toSize:CGSizeMake(612.0,612.0)];". Est mon hypothèse est correcte? De toute façon à atténuer ce problème que j'ai encore besoin d'afficher le "compressé" image ailleurs dans l'application.
- un million de mercis pour m'indiquer le post, c'est exactement ce dont j'avais besoin. Vous pouvez poster votre commentaire est une réponse afin que je puisse l'accepter. Merci encore
- Essayez de lire cette autre réponse: stackoverflow.com/questions/1703100/...
- Pour une raison étrange, je ne peux pas, il est toujours me poster un commentaire
- Ok, je pense que c'était trop court
Vous devez vous connecter pour publier un commentaire.
Faire
myImageView.contentMode = UIViewContentModeScaleAspectFit;
n'est pas suffisant, car il modifie le ratio d'aspect de l'image dans la façon Zhen veut, mais on ne change pas la source de l'image, qui est ce que Zhen besoins. La seule façon de le faire est d'utiliser la UIGraphicsImageContext comme expliqué là:Redimensionner UIImage avec un ratio d'aspect?
Vous devez ajuster votre
UIImageView
's mode de contenu:Juste pour les coups de pied - vérifier la documentation sur
UIViewContentMode
constantes.myImageView.contentMode = UIView.ContentMode.scaleAspectFit
Vous pouvez définir la
contentMode
bien sur votreUIImageView
exemple, comme:Cela va l'obliger à préserver votre image est le rapport d'aspect lors de la mise à l'échelle. Il y a également un certain nombre de valeurs que vous pouvez définir ici pour produire d'autres comportements, comme décrit dans la la documentation de référence.
contentMode
ne fonctionne pas pour vous. Pouvez-vous poster un exemple de code?