Photo webcam, gratuit

Prenez des photos avec votre webcam directement dans le navigateur. Appliquez des filtres, un minuteur et enregistrez vos clichés en local.

Vos photos ne quittent jamais votre appareil

Comment ça marche

  1. Autorisez la caméra : cliquez sur « Démarrer la caméra » et accordez l'accès quand le navigateur vous le demande.
  2. Réglez les options : choisissez un filtre, activez le mode miroir et définissez un minuteur si vous souhaitez vous positionner avant le déclenchement.
  3. Capturez et téléchargez : cliquez sur « Prendre la photo ». Les clichés s'accumulent dans la galerie, prêts à être téléchargés individuellement ou en lot.

Questions fréquentes

Mes photos sont-elles envoyées en ligne ?

Non. Tout le traitement a lieu dans votre navigateur via l'API MediaDevices ; les images ne quittent jamais votre appareil. Aucun serveur ne voit ni ne stocke votre flux vidéo.

Pourquoi la caméra ne démarre-t-elle pas ?

Vérifiez que vous avez autorisé l'accès à la caméra dans les réglages du navigateur, que le site est servi via HTTPS (obligatoire pour l'accès caméra) et qu'aucune autre application ne l'utilise déjà.

Puis-je choisir entre plusieurs webcams ?

Oui. Si plusieurs caméras sont connectées, le sélecteur « Caméra » les liste toutes : webcam intégrée, webcam USB externe, caméras virtuelles, etc.

Comment fonctionnent réellement les webcams dans le navigateur

L'accès à la caméra dans le navigateur est régi par la spécification W3C Media Capture and Streams. Le point d'entrée est navigator.mediaDevices.getUserMedia() : une fonction que la page appelle avec un objet constraints décrivant le type de flux qu'elle souhaite. Le navigateur affiche la demande d'autorisation ; si vous l'acceptez, la fonction se résout avec un objet MediaStream contenant une ou plusieurs pistes vidéo. La page lie ce flux à un élément <video> via video.srcObject = stream, le flux en direct s'affiche à l'écran, et capturer une image devient alors une simple question de dessiner la vidéo sur un <canvas> HTML5 au moment où l'utilisateur clique sur Prendre la photo. Le canvas est exporté via canvas.toBlob('image/jpeg'), ce qui devient le JPG téléchargeable. Aucune image ne quitte jamais votre appareil : tout le pipeline se trouve dans le processus de votre navigateur.

Le getUserMedia basé sur les promesses est arrivé sans préfixe dans Chrome 53 (septembre 2016) et Firefox 36 (février 2015). Safari était le retardataire : l'accès à la webcam depuis les pages web n'est arrivé sur iOS qu'avec iOS 11 (septembre 2017), et la cible stable moderne est iOS 14.5 ou ultérieur. D'ici 2026, l'API est essentiellement universelle : caniuse situe la prise en charge mondiale au-dessus de 97 %.

Pourquoi HTTPS est obligatoire

getUserMedia est réservé aux « contextes sécurisés » : HTTPS, localhost sur ordinateur, ou file:// dans Firefox. Les pages servies en HTTP ne peuvent pas du tout accéder à la caméra ; l'appel échoue avec une NotAllowedError. C'est le bug de déploiement le plus courant pour les variantes auto-hébergées de ce type d'outil, et il est appliqué uniformément par tous les navigateurs modernes. Le mobile est encore plus strict : il n'y a pas d'exemption localhost sur un téléphone, de sorte que tester des outils de caméra sur un serveur de développement local nécessite un outil de tunnel comme ngrok ou un proxy inverse avec TLS.

Les contraintes, ou comment demander la bonne caméra

L'objet constraints est la partie la plus complexe de l'API. Les réglages courants :

Le voyant de la caméra est votre signal de confiance

Sur un Mac doté d'une webcam de 2008 ou ultérieure, la LED verte à côté de la caméra est câblée sur le même rail d'alimentation que le capteur. macOS et le micrologiciel imposent que la LED soit allumée chaque fois que le capteur est alimenté : Apple a conçu cela de sorte que même un logiciel malveillant au niveau du noyau ne puisse pas éteindre la LED pendant que la caméra enregistre. iOS implémente l'indicateur en point orange en haut de l'écran depuis iOS 14 (publié en septembre 2020), dessiné par un processus système que l'application ne peut pas supprimer. Les webcams Windows utilisent une approche similaire sur la plupart des appareils modernes, bien que l'application en soit moins universelle : quelques anciennes webcams USB de 2010 avaient des LED contrôlées par logiciel. Sous Linux, cela varie selon le matériel.

À retenir : faites confiance à la LED, pas au site web. Un outil purement navigateur comme celui-ci peut sincèrement promettre que rien ne quitte votre appareil, et le voyant de la caméra vous donne une confirmation indépendante que la caméra est réellement éteinte quand la page le prétend. Le bug le plus courant des outils de webcam est d'oublier d'appeler stream.getTracks().forEach(t => t.stop()) à la fermeture, symptôme : le voyant de la caméra reste allumé après que l'utilisateur pense l'avoir éteint. Le bouton Arrêter la caméra de cette page l'appelle explicitement.

Quand recourir à un outil de webcam dans le navigateur

Le facteur de différenciation par rapport à Photo Booth sur macOS ou à l'application Caméra sur Windows est que rien n'est installé ni téléversé : utile sur les ordinateurs de travail verrouillés et les bornes partagées où vous ne pouvez pas installer de logiciel.

Filtres : ce que la propriété CSS filter vous offre

Le canvas HTML5 peut appliquer la syntaxe des filtres CSS via la propriété ctx.filter. Les filtres disponibles ci-dessus utilisent les mêmes primitives que n'importe quelle règle CSS peut appliquer : grayscale(1) (désaturation complète, équivalente à une projection de luminance), sepia(1) (teinte brune chaude imitant les photographies anciennes), invert(1) (négatif de couleur), blur(5px) (flou gaussien), brightness(1.4) (multiplie l'intensité des pixels) et contrast(1.4) (pivote autour du gris moyen). Ils sont accélérés matériellement dans tous les navigateurs depuis Chrome 53 / Firefox 35 / Safari 9.1.

Un détail subtil mais important : les filtres CSS appliqués à l'élément <video> ne se propagent pas au canvas. Pour intégrer le filtre dans le JPG enregistré, le même filtre doit être défini sur ctx.filter avant drawImage. Cette page le fait, de sorte que l'aperçu à l'écran correspond au fichier enregistré pixel par pixel.

Erreurs courantes et leur signification

Si Démarrer la caméra échoue, le rejet revient sous la forme d'une DOMException avec l'un de ces noms :

Autres questions

Pourquoi mon image est-elle à l'envers ou de travers ?

Certaines caméras Android signalent une rotation trompeuse dans leurs métadonnées EXIF. Le navigateur applique généralement la rotation automatiquement avant que l'image vidéo n'atteigne le canvas, mais les anciennes versions de Samsung Internet et certaines WebView intégrées sautent cette étape. Si les captures sortent de travers, essayez de faire pivoter votre appareil de 90° avant la capture, ou utilisez l'outil Pivoter une image ensuite.

Pourquoi la liste déroulante affiche-t-elle « Caméra 1, Caméra 2 » au lieu des noms ?

Parce que le navigateur n'a pas encore reçu l'autorisation d'accès à la caméra. enumerateDevices() ne renvoie les étiquettes (par ex. « FaceTime HD Camera ») qu'après que l'utilisateur a approuvé l'accès à la caméra au moins une fois dans la session en cours ; jusque-là, seuls des identifiants opaques sont renvoyés. Cliquez une fois sur Démarrer la caméra, autorisez l'accès, et la liste déroulante se rafraîchira avec les noms appropriés.

Le voyant de la caméra restera-t-il allumé après la fermeture de la page ?

Non. Le bouton Arrêter la caméra arrête explicitement chaque piste du flux, et les navigateurs modernes arrêtent aussi les pistes lorsque l'onglet est masqué ou que la page se décharge. Si vous voyez un jour la LED de la caméra rester allumée après la fermeture d'un onglet, c'est un bug qui mérite d'être signalé : le plus souvent, cela signifie que la page n'a pas appelé la fonction de nettoyage. Sur cet outil, cliquer sur Arrêter la caméra ou fermer l'onglet libère le matériel immédiatement.

Puis-je enregistrer une vidéo, et pas seulement des images fixes ?

Pas avec cet outil : il s'agit uniquement de capture de photos fixes. L'enregistrement vidéo nécessite l'API MediaRecorder et produit des fichiers en WebM, MP4 ou MKV selon le navigateur. L'enregistrement a aussi ses propres implications de confidentialité (vous stockez de plus grandes quantités de séquences identifiables), c'est donc un cas d'usage distinct qui mérite son propre outil dédié.

Des données sont-elles envoyées à un serveur ?

Non. Le flux vidéo est fourni directement du système d'exploitation au navigateur ; la capture du canvas et l'export JPG se font via JavaScript en local ; la galerie réside dans la mémoire du navigateur et est téléchargée directement sur votre appareil. Rien concernant votre caméra, votre visage ou vos photos ne quitte la page.

Outils associés