Crop d'une photo
Hello la communauté,
Voila je viens vers vous, car mes recherches ont été jusqu'à présent infructueuses sur le sujet.
Dans le cadre d'un projet en Swift 3 j'ai besoin de faire un crop photo (comme sur l'image ci dessous) après que l'utilisateur ai pris une photo avec l'appareil ou en ai sélectionné une dans sa librairie (via l'utilisation de UIImagePickerController)
En cherchant un peu j'ai pu trouver le Pod AAPhotoCircleCrop qui ne fait qu'en partie ce que je souhaite (en effet ce dernier ne prends pas la totalité de l'écran, j'ai cru comprendre qu'il fallait modifier la courbe de Béziers).
J'avoue bloquer et c'est pour cela que je viens solliciter votre aide.
Bonne journée à toutes et à tous
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Regarde ces 2 projets, ça pourra peut-être t'aider
https://github.com/AlexLittlejohn/ALCameraViewController
https://github.com/justwudi/WDImagePicker
Merci Insou je regarde ça
PS: J'étais tombé dessus mais c'est un crop circulaire dont j'ai besoin, je sais pas si ça le fera ces projets la...
Je l'ai pas précisé mais le "crop" doit être un "filtre" par dessus la photo et on ne pourra pas bouger ce "filtre", il faudrait bouger et / ou zoomer / dézoomer la photo donc le 2e me parait pas correspondre à ce que je souhaite
et avec ça ?
http://stackoverflow.com/questions/29046571/cut-a-uiimage-into-a-circle-swiftios
// Edit
Pour l'histoire du filtre par dessus, aucune idée comment faire..
Peut-être que c'est juste un filtre visuel, pour faire un aperçu du rendu et que tu peux faire le job avec ce code là
Je regarde ça.
En fait l'idée c'est d'avoir ce filtre par dessus, et une fois le crop validé je doit garder que la photo qui se trouve dans le cercle dans le filtre (visiblement ça a déjà été fait par un collègue en Obj-C mais "ça serait chiant de faire un header-bridge juste pour ça")
Pas sur que ça m'aide j'ai déjà arrondi mon image actuelle en faisant ça
C'est facile à faire avec un contexte graphique. Quand tu dessines une image dans un contexte graphique, elle écrase le contenu précédent en l'écrasant. Mais on peut aussi utiliser un opérateur graphique pour "mélanger" les pixels de l'image avec le contenu précédent. Il y a de nombreux opérateurs :
https://developer.apple.com/reference/coregraphics/cgblendmode
L'opérateur .sourceAtop est particulièrement intéressant, parce qu'il mélange les couleurs en se basant sur les pixels de couleurs transparente. Cela permet de "filtrer" les pixels de l'image selon n'importe quelle forme.
a
a
Exemple de mise en oeuvre :
a
a
Copie d'écran du résultat :
Merci je vais essayer de me pencher dessus, car la comme ça, même si ça a l'air de faire ce que je veux, c'est du chinois, et j'aimerais bien comprendre le code
J'ai essayé de regarder et de bidouiller un peu ton code, le souci c'est que c'est une ellipse, alors que moi c'est un cercle que je veut
Une ellipse est ovale, alors qu'un circle est rond, et dans mes specs il me faut un rond
Bon j'ai réussi à faire le cercle, mais ça réponds pas à mes specs:
- j'ai besoin d'un filtre (avec un rond)
- et mon image derrière le filtre doit pouvoir être déplacée et zoomée / dézoomée
- la partie de l'image qui sera gardée est celle qui sera dans le filtre
a
L'image est ronde, mais paraà®t déformé parce j'ai forcé le UIImageView à avoir la même taille que l'écran. Essaye avec ça :
Effectivement j'avais trouvé cette solution et mon crop est désormais rond, mais comme dis ci dessus ça réponds malheureusement pas à mes specs, et ça me parait difficile de combiner 2 imageView pour n'en garder qu'une seule zone
Si je comprend bien, le rond est de taille fixe et c'est la photo qui doit bouger et être zoomée ? Cela ne change rien au système de filtrage en lui-même. Je présume que les déplacements se font avec le doigt et les zooms avec un pincement/étirement ?
Le rond doit être dans ce rectangle la (position + taille)
Et effectivement c'est uniquement la photo qui doit être bougée (avec le doigt) et zoomée / dézoomée (avec un pincement / étirement).
Et au final je dois ne garder que la partie de la photo qui se trouvera dans le rond
SeÌrieusement ? Tu as une solution toute faite et c'est un header-bridge qui te bloque ?!
Au lieu de chercher comment reÌinventer la roue regarde plutoÌ‚t comment faire un header-bridge ça te servira à l'avenir (le reste aussi mais un bon développeur est fainéant).
Le lien sur comment faire.
Je te redis ce que m'a dit un collègue
Et d'ailleurs je suis en train de voir avec le mec qui a fait le pod en Obj-C il avais mis un équivalent sur Dropbox mais désormais ça renvoie un 404...
Tu as besoin de deux filtres :
- un pour fabriquer ton image en cours d'édition
- un pour fabriquer l'image finale, en ne gardant que le rond
Voici une version modifiée de mon premier filtre, pour fabriquer l'image en mode édition :
a
La première version efface tous les pixels en dehors du cercle. La seconde conserve les pixels, avec une transparence de 30% ce qui les rends "anémique".
Résultat en image :
Par 2 "filtres" tu entends 2 imageViews ?
Non !
Par filtre j'entend une méthode trafiquant une UIImage pour en fabriquer une nouvelle.
UIImage -> opération graphique -> nouvelle UIImage
Dans le cas présent :
UIImage Photo -> cropEllipse() -> image photo coupée en cercle
UIImage Photo -> cropPartielEllipse() -> image photo avec cercle bien visible et contour en moins visible
Le UIImageView n'est pas une image, mais sa représentation graphique sur l'écran. C'est juste un visualisateur.
Ok je vois merci
Juste pour rire, on peut cropper une image à partir de la silhouette en ombre chinoise d'une autre :
a
f
Exemples :
Pendant que j'y pense, voici deux extensions de UIImage utiles pour ton projet :
- decoupage() permet d'extraire une partie d'une image.
- resize() crée une copie de l'image plus grande ou plus petite que l'original.
Merci pour ton investissement Draken, tu gères
L'investissement n'est pas bien lourd. J'avais déjà tout sous la main.
Ca n'empêche quand même, qu'un merci c'est un minimum, tu te démènes (même si j'ai bien compris que c'était déjà fait) depuis hier pour m'aider
Je vais regarder ta solution BTW
Et aussi si ça peut intéresser du monde: le pod Obj-C que mon collègue utilisait est de nouveau dispo en swift sur Dropbox
Lien ici : https://github.com/ruslanskorb/RSKImageCropper/issues/120
Je vais y jeter aussi un oeil
Résolu en utilisant le pod RSKImageCropper.
Cependant j'ai quand même ajouté ton extension Image Draken, qui sait, ça pourrait me servir
Good !
Au fait, mon système fonctionne aussi avec l'opérateur graphique BlendMode.sourceIn dont l'équation est plus simple à comprendre :
S = image Source
Da = canal alpha de l'image présente sur la Destination
R = Résultat final du mélange des deux images
R = S*Da
C'est pas faux ;D
Merci en tout cas