Définir les dimensions pour UIImagePickerController" déplacer et mettre à l'échelle " cropbox

Comment l'écran" déplacer et mettre à l'échelle " détermine-t-il les dimensions de sa boîte de culture?

Fondamentalement, je voudrais définir une largeur et une hauteur fixes pour le "CropRect" et laisser l'utilisateur déplacer et mettre à l'échelle son image pour s'adapter à cette boîte comme vous le souhaitez.

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

Merci!

36
demandé sur Thomas K 2012-01-28 04:07:56

4 réponses

Impossible avec UIImagePickerController malheureusement. La solution que je recommande est de désactiver l'édition pour le sélecteur d'image et de le gérer vous-même. Par exemple, je mets l'image dans une vue d'image scrollable et zoomable. Au-dessus de la vue de l'image se trouve une position fixe "vue du guide de recadrage" qui dessine l'indicateur de recadrage que l'utilisateur voit. En supposant que la vue guide ait 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 recadrage comme suit. Vous vous pouvez utiliser la catégorie UIImage + redimensionner pour effectuer le recadrage réel.

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];
35
répondu Marc Charbonneau 2012-02-01 18:59:44

Un Peu tard pour le jeu, mais je pense que c'est peut être ce que vous cherchez: https://github.com/gekitz/GKImagePicker

24
répondu Yuriy 2013-01-07 03:18:57

Voici une solution pour le recadrage manuel par Ming Yang. https://github.com/myang-git/iOS-Image-Crop-View

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

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

3
répondu Sriram 2015-07-07 15:12:00

Il est maintenant plus tard que tard mais peut être utile pour quelqu'un. C'est la bibliothèque que j'ai utilisée pour swift (un grand merci à 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 rectangulaire défini par l'utilisateur et également en mode circulaire, par exemple pour mettre à jour l'image de profil. voici un exemple de code 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
répondu MFA 2018-05-29 11:38:50