Escáner de Códigos QR
Escanea códigos QR desde tu cámara o desde una imagen subida, enteramente en tu navegador.
Cargando Escáner de Códigos QR… Si no ocurre nada, activa JavaScript.
Los códigos QR codifican URL, tarjetas de contacto, credenciales de Wi-Fi, información de pago y texto arbitrario en un código de barras bidimensional compacto que cualquier cámara de smartphone puede leer en menos de un segundo. Pero, ¿qué pasa si necesitas decodificar un código QR de una captura de pantalla, un archivo de imagen o una pantalla secundaria, sin sacar el teléfono? Los navegadores modernos ahora exponen la API BarcodeDetector, una interfaz nativa que procesa los datos de imagen localmente en el dispositivo, lo que hace posible un escaneo de QR totalmente basado en el navegador sin ninguna subida a un servidor ni aplicación de terceros.
Preguntas frecuentes
¿Las imágenes escaneadas o los fotogramas de la cámara se suben a un servidor?
¿Cómo funciona técnicamente la API BarcodeDetector?
¿Qué navegadores y formatos de código de barras son compatibles?
¿Qué permiso pide el navegador al usar la cámara?
¿Puedo escanear un código QR desde una captura de pantalla o una imagen de mi ordenador?
¿Por qué a veces falla el escaneo en un código QR válido?
¿En qué se diferencia esto de simplemente usar la cámara de mi teléfono?
¿Puedo usar esto para verificar un código QR que acabo de generar?
¿Es seguro escanear un código QR desconocido con esta herramienta?
¿La herramienta funciona en navegadores móviles?
Acerca de Escáner de Códigos QR
Los casos de uso de un escáner de QR basado en navegador son más amplios de lo que podría parecer a primera vista. Los desarrolladores se encuentran con frecuencia códigos QR en documentación, maquetas de diseño, flujos de autenticación y entornos de prueba donde escanear con un teléfono resulta incómodo. Los profesionales de TI verifican las credenciales de Wi-Fi codificadas en QR antes de desplegar señalización. Los investigadores de seguridad inspeccionan códigos QR en campañas de phishing de forma segura, decodificando la URL sin hacer clic en ella. Los creadores de contenido y los responsables de marketing decodifican los códigos QR de la competencia para ver hacia dónde redirigen. Cualquiera que reciba una imagen con un código QR incrustado puede arrastrarla a esta herramienta y leer el contenido al instante.
La herramienta usa dos vías de decodificación según la compatibilidad del navegador. En los navegadores basados en Chromium (Chrome 88+, Edge 88+, Opera 74+) y Safari 17+, usa la API nativa `BarcodeDetector`, que entrega los datos de imagen en bruto al motor de decodificación integrado del navegador, el mismo motor que usa la aplicación de cámara del sistema operativo. En los navegadores que no admiten `BarcodeDetector`, recurre a una implementación en JavaScript. En ambos casos, los datos de imagen se procesan enteramente en tu dispositivo; nada se sube a ningún servidor. Para el modo de cámara, la herramienta usa la API `getUserMedia` para acceder a la transmisión de tu webcam, procesa los fotogramas localmente y detiene la transmisión en el momento en que te marchas de la página.
Para obtener mejores resultados al subir una imagen, usa una versión de alto contraste del código con al menos 10 píxeles por módulo (cada cuadro negro o blanco). Las imágenes JPEG comprimidas pueden introducir artefactos en los bordes de los módulos que confunden a los decodificadores; los archivos PNG se decodifican de forma más fiable. Si un escaneo falla, prueba a aumentar el brillo y el contraste de la imagen en cualquier editor de imágenes antes de subirla. Para el escaneo en vivo con la cámara, asegúrate de tener una iluminación uniforme sin reflejos fuertes en la superficie del código, y mantén la cámara firme a una distancia en la que el código completo llene aproximadamente la mitad del encuadre.
Cámaras que leen códigos: cómo el escaneo de códigos de barras basado en navegador se hizo posible
Durante la mayor parte de los 70 años de historia del código de barras, leer uno requería hardware especializado: escáneres láser en los supermercados, lectores de mano específicos en los almacenes o, como mínimo, una aplicación móvil nativa con acceso directo a la cámara. La idea de que una página web pudiera decodificar un código de barras en tiempo real sin ningún software instalado habría parecido inverosímil aún en 2015. El cambio vino de dos desarrollos que convergieron: la rápida mejora del rendimiento de las GPU móviles y el acuerdo de los fabricantes de navegadores para estandarizar el acceso a las cámaras de los dispositivos a través de la API `getUserMedia`, que alcanzó una compatibilidad generalizada alrededor de 2016.
Los primeros escáneres de QR basados en navegador dependían enteramente de bibliotecas de JavaScript que implementaban el algoritmo de decodificación Reed-Solomon por software. Funcionaban, pero eran lentos, consumían mucha CPU y eran propensos a fallar con imágenes de bajo contraste o ligeramente borrosas. La mejora crítica llegó cuando Google propuso la Shape Detection API, más tarde refinada en la API BarcodeDetector, que expone los mismos canales de análisis de imágenes acelerados por hardware que usan las aplicaciones nativas. Al delegar en los marcos Vision o ML Kit del sistema operativo, la velocidad de detección mejoró en órdenes de magnitud y la fiabilidad igualó a la de las aplicaciones de cámara nativas.
La API BarcodeDetector se incorporó en Chrome 83 en 2020 y representa una tendencia más amplia de navegadores que absorben capacidades que antes requerían aplicaciones nativas: acceso al sistema de archivos, Bluetooth, USB, portapapeles y ahora la visión artificial. Cada capacidad estandarizada reduce la brecha entre las aplicaciones web y las nativas, aunque los fabricantes de navegadores discrepan sobre hasta dónde extender este acceso. La decisión de Firefox de no implementar BarcodeDetector refleja un debate filosófico en curso sobre si los navegadores deberían exponer API de hardware de bajo nivel siquiera, un debate que el caso de uso del escaneo de códigos de barras hace concreto y práctico.