web-dev-qa-db-fra.com

Définition des dimensions de la boîte de recadrage "déplacer et redimensionner" de UIImagePickerController

Comment l'écran "déplacer et redimensionner" détermine-t-il les dimensions de son cropbox?

En gros, j'aimerais définir une largeur et une hauteur fixes pour le "CropRect" et permettre à l'utilisateur de déplacer et de redimensionner son image pour qu'elle s'adapte à cette case comme souhaité.

Est-ce que quelqu'un sait comment faire ça? (Ou si c'est même possible avec le UIImagePickerController)

Merci!

36
Thomas K

Pas possible avec UIImagePickerController malheureusement. La solution que je recommande est de désactiver la modification du sélecteur d'images et de la gérer vous-même. Par exemple, je mets l'image dans une vue défilable et zoomable. En haut de la vue de l'image se trouve une "vue du guide de recadrage" à position fixe qui dessine l'indicateur de recadrage visible par l'utilisateur. En supposant que la vue de guidage possède des propriétés pour le rect visible (la partie à conserver) et les largeurs de bord (la partie à ignorer), vous pouvez obtenir le rectangle de rognage comme suit. Vous pouvez utiliser la catégorie UIImage + Resize pour effectuer le rognage.

CGRect cropGuide = self.cropGuideView.visibleRect;
UIEdgeInsets edges = self.cropGuideView.edgeWidths;
CGPoint cropGuideOffset = self.cropScrollView.contentOffset;

CGPoint Origin = CGPointMake( cropGuideOffset.x + edges.left, cropGuideOffset.y + edges.top );
CGSize size = cropGuide.size;
CGRect crop = { Origin, size };

crop.Origin.x = crop.Origin.x / self.cropScrollView.zoomScale;
crop.Origin.y = crop.Origin.y / self.cropScrollView.zoomScale;
crop.size.width = crop.size.width / self.cropScrollView.zoomScale;
crop.size.height = crop.size.height / self.cropScrollView.zoomScale;

photo = [photo croppedImage:crop];
36
Marc Charbonneau

Un peu tard dans le jeu mais je pense que c'est peut-être ce que vous recherchez: https://github.com/gekitz/GKImagePicker

24
Yuriy

Voici une solution de culture manuelle par Ming Yang. https://github.com/myang-git/iOS-Image-Crop-View

Il offre un cadre rectangulaire, que l'utilisateur peut faire glisser ou faire glisser pour s'adapter à la partie requise de l'image dans le rectangle. S'il vous plaît noter que cette solution fait l'inverse de la question posée - permet à la taille du rectangle varie, mais apporte finalement le résultat souhaité. 

Il est codé en Objective-C. Vous devrez peut-être le coder dans Swift ou tout simplement créer un en-tête de pontage pour connecter le code Objective-C au code Swift. 

4
Sriram

Il est maintenant tard que tard mais peut être utile pour quelqu'un. Voici la bibliothèque que j'ai utilisée pour Swift (merci beaucoup à Tim Oliver ):

TOCropViewController

comme décrit dans le fichier README dans le lien GitHub ci-dessus, en utilisant cette bibliothèque, vous pouvez obtenir des images recadrées en mode rectangulaire défini par l'utilisateur ainsi qu'en mode circulaire, par exemple Pour mettre à jour l'image de profil, vous trouverez ci-dessous un exemple de code provenant de GitHub:

func presentCropViewController {
  let image: UIImage = ... //Load an image

  let cropViewController = CropViewController(image: image)
  cropViewController.delegate = self
  present(cropViewController, animated: true, completion: nil)
}

func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
        // 'image' is the newly cropped version of the original image
    }
1
MFA