Camera & Photo Capture UI
Camera & Photo Capture UI
8 reglasPide el permiso de camara en contexto, justo antes de la acción que lo necesita
Solicitar acceso a la camara al cargar la página, sin que el usuario tenga contexto, hace que la mayoría deniegue el prompt y bloquee el acceso de forma permanente. El permiso aterriza mejor cuando va precedido de una breve explicación de por que hace falta la camara y lo dispara un gesto explicito del usuario, nunca un script automático. Una vez denegado, el navegador exige al usuario desbloquear el sitio manualmente en ajustes, así que cada prompt desperdiciado es caro.
web.dev "Capturing images" · MDN MediaDevices.getUserMedia() · Apple HIG · NSCameraUsageDescriptionMuestra una guía de encuadre que coincida con la forma del objeto a capturar
Un overlay con recorte transparente y fondo atenuado le dice al usuario exactamente donde apuntar, eliminando la incertidumbre para INE, QR, cheques o códigos de barras. Sin guía, los usuarios capturan el objetivo descentrado, recortado o en un angulo que el OCR o el decodificador posterior no pueden procesar. La forma del overlay debe coincidir con la física de lo que se captura: cuadrado para QR, rectangulo vertical para identificaciones, horizontal para tarjetas o documentos.
Scanbot SDK "Barcode scanner viewfinder" · MDN "Taking still photos"Haz el botón de captura grande, central y obvio como acción primaria
El obturador es la acción principal de toda pantalla de camara y debe verse como tal: un botón circular grande, centrado en la franja inferior, con un tap target generoso. Comprimirlo entre otros controles o reducirlo al tamaño de un icono más obliga al usuario a apuntar con precisión mientras sostiene el telefono, una postura inestable. Los controles secundarios (flash, voltear) se colocan a los lados, más pequeños, para que la jerarquía sea inequivoca.
Apple HIG "Cameras" · Material Design "Camera" · WCAG 2.5.5 Target Size (44×44px)Ofrece un cambio claro entre camara frontal y trasera
La mayoría de flujos tienen una camara preferida por defecto (trasera para documentos, frontal para selfies o verificación de rostro), pero el usuario debe poder cambiarla con un solo toque. El control de volteo va proximo al obturador, con un icono de rotación reconocible y un estado que indique que camara esta activa. En la API esto se logra con la constraint facingMode: "environment" o "user"; reabrir el stream con el modo opuesto evita pedir permiso de nuevo.
Confirma la captura con destello, vista previa y controles explicitos de Retomar / Usar
Un breve destello blanco da confirmación instantanea e inequivoca de que se capturo un cuadro; sin el, el usuario toca de nuevo creyendo que fallo y genera envios duplicados. La imagen capturada debe mostrarse como vista previa para que juzgue calidad (foco, luz, encuadre) antes de enviar el formulario. El par Retomar / Usar es la interfaz mínima post-captura, con "Usar" como acción primaria. Nunca envies la imagen en silencio sin darle oportunidad de revisarla.
MDN "Taking still photos" (drawImage en canvas) · Apple HIG "Cameras"Mapea cada error de camara a un mensaje accionable con ruta de salida
getUserMedia() rechaza con nombres de error distintos que exigen respuestas distintas: NotAllowedError (el usuario o la Permissions Policy bloqueo el acceso y debe desbloquearlo en ajustes), NotFoundError (no hay camara), NotReadableError (otra app la esta usando). Un genérico "Camara no disponible" para todos los casos obliga a un troubleshooting innecesario. Cada estado de error debe ofrecer además una salida: un enlace a la guía de ajustes o un fallback a subir archivo, para que el usuario nunca quede atrapado.
Ofrece siempre subir archivo junto al disparador de camara, nunca solo camara
El usuario puede haber revocado el permiso, estar en un dispositivo sin camara, en penumbra, o simplemente preferir subir una foto existente. La camara puede ser el default ofrecido en flujos móviles que se benefician de captura en vivo, pero una opción "Elegir de la galeria" o "Subir archivo" siempre debe estar visible, no escondida en un menú overflow. Lo más simple es un <input type="file" accept="image/*"> (sin el atributo capture) junto al botón de camara.
Etiqueta cada control, anuncia los cambios de estado y nunca dependas solo de la camara
Los controles de camara como botones de solo icono (obturador, voltear, flash, retomar) son invisibles para usuarios de lector de pantalla salvo que cada botón tenga un nombre accesible. Cuando la captura tiene exito, el cambio de estado ("Foto capturada. Revisa la imagen o retoma.") debe anunciarse vía una region aria-live, y el foco debe moverse al primer control accionable. Para flujos que verifican identidad por visión (p. ej. "saluda a la camara"), WCAG 2.5.4 exige una alternativa de UI equivalente.
- R-799 Pide el permiso de camara en contexto, justo antes de la acción que lo necesita
- R-800 Muestra una guía de encuadre que coincida con la forma del objeto a capturar
- R-801 Haz el botón de captura grande, central y obvio como acción primaria
- R-802 Ofrece un cambio claro entre camara frontal y trasera
- R-803 Confirma la captura con destello, vista previa y controles explicitos de Retomar / Usar
- R-804 Mapea cada error de camara a un mensaje accionable con ruta de salida
- R-805 Ofrece siempre subir archivo junto al disparador de camara, nunca solo camara
- R-806 Etiqueta cada control, anuncia los cambios de estado y nunca dependas solo de la camara