Autoriser uniquement l'access à l'appareil photo dans HTML5

Je développe actuellement une application en utilisant l'appareil photo pour iPhone en HTML5 avec

<input type="file" accept="capture=camera"> 

Le problème est que j'ai une petite list qui me donne le choix entre ma bibliothèque et mon appareil photo.

entrez la description de l'image ici

Mon idée est d'avoir deux buttons, un pour la bibliothèque et un autre pour la camera.

Je connais le moyen de ne donner qu'à la bibliothèque mais pas à la camera.

Question: Y a t-il un moyen de séparer les deux types?

Malheureusement pas possible: /

Extrait de HTML Media Capture – Considérations sur la security et la confidentialité :

En outre, l'implémentation de l'agent user est conseillée pour fournir une indication à l'user lorsqu'un périphérique d'input est activé et permettre à l'user de mettre fin à une telle capture. De même, il est conseillé à l'agent user d'offrir le contrôle de l'user, par exemple pour permettre à l'user de:

  • select le périphérique de capture de média exact à utiliser s'il existe
    plusieurs appareils du même type (par exemple une camera frontale
    plus à une camera primaire).

  • désactiver la capture sonore lorsque dans le
    mode de capture video.

J'ai aussi eu ce problème, je n'ai pas trouvé de solution, je n'ai trouvé que des sources non officielles déclarant que ce n'était pas possible. Tout ce que vous pouvez faire est de requestr video/* ou image/* via l'atsortingbut accept .

Ce n'est pas possible dans iOS6 à 10. Cela fonctionne sur Android 3.0+.

L'atsortingbut capture , introduit par HTML Media Capture , devrait forcer iOS à aller directement à l'application cam, mais ce n'est pas supporté.

De la spécification :

L'atsortingbut capture est un atsortingbut boolean qui, s'il est spécifié, indique que la capture de média directement à partir de l'environnement de l'appareil … est préférée.

PS: Votre code est légèrement incorrect, vous devez utiliser <input accept="video/*,image/*" capture > pour:

  1. capturer à la fois video et photos
  2. sauter directement à la camera (si supporté)

Voir Corriger la syntaxe de capture de média HTML pour plus de détails.

Écrivez la méthode takePhoto acton suivante:

 - (IBAction)takePhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:picker animated:YES completion:NULL]; } 

Enfin, nous faisons la même chose pour la méthode d'action selectPhoto, mais en changeant le sourceType à UIImagePickerControllerSourceTypePhotoLibrary.

 - (IBAction)selectPhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:picker animated:YES completion:NULL]; } 

Implémentation des methods Delegate de UIImagePickerController

Lorsque l'user prend une photo avec l'appareil photo et redimensionne l'image (le redimensionnement de la photo est autorisé puisque nous avons dit allowEditing = YES lorsque nous avons créé le sélecteur d'image). C'est un NSDictionary qui contient, entre autres choses, l'image originale et l'image éditée (accessible via la balise UIImagePickerControllerEditedImage).

 (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [picker dismissViewControllerAnimated:YES completion:NULL]; }