如果有兴趣,请联系[email protected]
。
重要该项目处于维护模式,直至另行通知。作者暂时无法进行任何错误修复或改进。拉取请求也暂时不会被合并。如果您有可以维护的分叉 - 请将详细信息分享至 [email protected]。我很高兴在这里为他们做广告!可以按原样使用该项目。示例:scanapp.org。
使用这个轻量级库可以轻松/快速地将 QR 码、条形码和其他常见代码扫描功能集成到您的 Web 应用程序中。
?支持扫描不同类型的条形码和二维码。
?支持不同平台:Android、IOS、MacO、Windows 或 Linux
支持不同的浏览器,如 Chrome、Firefox、Safari、Edge、Opera ...
?支持相机扫描以及本地文件扫描
➡️ 附带一个带有 UI 的端到端库以及一个用于构建您自己的 UI 的低级库。
?支持自定义,如闪光灯/手电筒支持、缩放等。
支持两种API
Html5QrcodeScanner
— 带 UI 的端到端扫描器,集成不到十行代码。
Html5Qrcode
— 一组强大的 API,您可以使用它来构建 UI,而无需担心相机设置、处理权限、读取代码等。
支持扫描设备上的本地文件是一项新增功能,对于不支持智能手机中内联网络摄像头访问的网络浏览器很有帮助。注意:这不会将文件上传到任何服务器 - 一切都在本地完成。
scanapp.org 上的演示 | qrcode.minhazav.dev 上的演示 -扫描不同类型的代码 |
通过支持该项目的赞助目标来帮助激励功能开发和错误修复。请参阅此处赞助的功能请求列表。
该项目的文档已移至 scanapp.org/html5-qrcode-docs。
我们正在不断努力增加对越来越多平台的支持。如果您发现库无法工作的平台或浏览器,请随时提出问题。检查演示链接进行测试。
传奇
火狐浏览器 | 铬合金 | 狩猎之旅 | 歌剧 | 边缘 |
---|---|---|---|---|
铬合金 | 火狐浏览器 | 边缘 | 歌剧 | 迷你歌剧院 | UC |
---|---|---|---|---|---|
狩猎之旅 | 铬合金 | 火狐浏览器 | 边缘 |
---|---|---|---|
* | * |
* 支持 IOS 版本 >= 15.1
在15.1版本之前,iOS中的Chrome、Firefox和其他浏览器使用Webkit for IOS,并且它们还没有网络摄像头权限。修复 iOS 支持方面存在一个持续存在的问题 - issues/14
该库可以轻松地与其他几个框架一起使用,我已经为其中一些框架添加了示例,并将继续添加更多示例。
html5 | VueJs | 电子学 | 反应 | 点燃 |
扫码依赖Zxing-js库。我们将在此基础上努力添加对更多类型的代码扫描的支持。如果您认为某种类型的代码会有所帮助,请提交功能请求。
代码 | 例子 |
---|---|
二维码 | |
阿兹特克 | |
代码_39 | |
代码_93 | |
代码_128 | |
国际乒联 | |
EAN_13 | |
EAN_8 | |
PDF_417 | |
UPC_A | |
UPC_E | |
数据矩阵 | |
最大代码* | |
RSS_14* | |
RSS_扩展* |
*我们与本机 BarcodeDetector API 集成的实验性集成不支持格式(了解更多)。
在 scanapp.org 上查看端到端扫描仪体验。
这是一个跨平台 JavaScript 库,用于将 QR 码、条形码和一些其他类型的代码扫描功能集成到在 HTML5 兼容浏览器上运行的应用程序。
支持:
在 scanapp.org/html5-qrcode-docs 上查找有关如何使用此库的详细指南。
扫描此图片或访问 blog.minhazav.dev/research/html5-qrcode.html
查看这些有关如何使用该库的文章:
图:MacBook Pro 上运行的 Google Chrome 的屏幕截图
完整的 API 文档请访问 scanapp.org/html5-qrcode-docs/docs/apis。
start()
方法中的额外可选configuration
可用于配置扫描行为和用户界面 (UI) 的配置对象。大多数字段都有默认属性,除非提供不同的值,否则将使用这些默认属性。如果你不想覆盖任何东西,你可以传入一个空对象{}
。
fps
— 整数,示例 = 10 AKA 每秒帧数,默认值为 2,但可以增加该值以获得更快的扫描速度。增加过高的值可能会影响性能。值>1000
将会失败。
qrbox
— QrDimensions
或QrDimensionFunction
(可选),示例 = { width: 250, height: 250 }
使用此属性可以限制要用于扫描的取景器区域。取景器的其余部分将被遮蔽。例如,通过传递 config { qrbox : { width: 250, height: 250 } }
,屏幕将如下所示:
这可用于设置矩形扫描区域,配置如下:
let config = { qrbox : { width : 400 , height : 150 } }
此配置还接受类型的函数
/**
* A function that takes in the width and height of the video stream
* and returns QrDimensions.
*
* Viewfinder refers to the video showing camera stream.
*/
type QrDimensionFunction =
( viewfinderWidth : number , viewfinderHeight : number ) => QrDimensions ;
这允许您根据视频尺寸设置动态 QR 框尺寸。例如,请参阅此博客文章:在 Html5-qrcode 中设置动态 QR 框大小 - ScanApp 博客
这对于条形码扫描来说可能是理想的。
如果未设置此值,则不会渲染阴影 QR 框,并且扫描仪将扫描视频流的整个区域。
aspectRatio
— 浮点型,示例 1.777778 为 16:9 宽高比使用此属性以特定的宽高比呈现视频源。传递像100000:1
这样的非标准宽高比可能会导致视频源甚至不显示。理想值可以是:
价值 | 纵横比 | 使用案例 |
---|---|---|
1.333334 | 4:3 | 标准相机长宽比 |
1.777778 | 16:9 | 全屏、影院级 |
1.0 | 1:1 | 广场景观 |
如果不传递任何值,则整个取景器将用于扫描。注意:该值必须小于QR code HTML element
的宽度和高度。
disableFlip
— 布尔值(可选),默认 = false默认情况下,扫描仪可以扫描水平翻转的二维码。这还允许使用有时会镜像的移动设备上的前置摄像头扫描二维码。默认情况下这是false
,我建议仅在以下情况下更改此设置:
这是普通二维码和镜像二维码的示例
普通二维码 | 镜像二维码 |
---|---|
rememberLastUsedCamera
— 布尔值(可选),默认 = true如果为true
则用户最后使用的相机以及天气或未授予许可将被记住在本地存储中。如果用户之前已授予权限 - 用户界面中的请求权限选项将被跳过,最后选择的相机将自动启动进行扫描。
如果为true
则库应记住先前是否授予了相机权限以及上次使用的相机是什么。如果已授予“相机”权限,则将自动*开始扫描以前使用过的相机的二维码。
supportedScanTypes
- Array<Html5QrcodeScanType> | []
仅
Html5QrcodeScanner
支持此功能。
默认 = [Html5QrcodeScanType.SCAN_TYPE_CAMERA, Html5QrcodeScanType.SCAN_TYPE_FILE]
该字段可用于:
Camera
或File
扫描的支持。使用方法:
function onScanSuccess ( decodedText , decodedResult ) {
// handle the scanned code as you like, for example:
console . log ( `Code matched = ${ decodedText } ` , decodedResult ) ;
}
let config = {
fps : 10 ,
qrbox : { width : 100 , height : 100 } ,
rememberLastUsedCamera : true ,
// Only support camera scan type.
supportedScanTypes : [ Html5QrcodeScanType . SCAN_TYPE_CAMERA ]
} ;
let html5QrcodeScanner = new Html5QrcodeScanner (
"reader" , config , /* verbose= */ false ) ;
html5QrcodeScanner . render ( onScanSuccess ) ;
对于基于文件的扫描,仅选择:
supportedScanTypes: [ Html5QrcodeScanType . SCAN_TYPE_FILE ]
为了像现在一样支持两者,您可以忽略此字段或设置为:
supportedScanTypes: [
Html5QrcodeScanType . SCAN_TYPE_CAMERA ,
Html5QrcodeScanType . SCAN_TYPE_FILE ]
要将基于文件的扫描设置为默认,请更改顺序:
supportedScanTypes: [
Html5QrcodeScanType . SCAN_TYPE_FILE ,
Html5QrcodeScanType . SCAN_TYPE_CAMERA ]
showTorchButtonIfSupported
- boolean | undefined
仅
Html5QrcodeScanner
支持此功能。
如果true
渲染的 UI 将有按钮根据设备 + 浏览器支持打开或关闭闪光灯。默认值为false
。
默认情况下,会根据所有支持的代码格式扫描相机流和图像文件。 Html5QrcodeScanner
和Html5Qrcode
类都可以配置为仅支持受支持格式的子集。支持的格式在枚举 Html5QrcodeSupportedFormats 中定义。
enum Html5QrcodeSupportedFormats {
QR_CODE = 0 ,
AZTEC ,
CODABAR ,
CODE_39 ,
CODE_93 ,
CODE_128 ,
DATA_MATRIX ,
MAXICODE ,
ITF ,
EAN_13 ,
EAN_8 ,
PDF_417 ,
RSS_14 ,
RSS_EXPANDED ,
UPC_A ,
UPC_E ,
UPC_EAN_EXTENSION ,
}
我建议仅当您需要显式忽略对某些格式的支持或出于性能原因想要减少每秒完成的扫描次数时才使用此选项。
Html5Qrcode
扫描 QR 码 const html5QrCode = new Html5Qrcode (
"reader" , { formatsToSupport : [ Html5QrcodeSupportedFormats . QR_CODE ] } ) ;
const qrCodeSuccessCallback = ( decodedText , decodedResult ) => {
/* handle success */
} ;
const config = { fps : 10 , qrbox : { width : 250 , height : 250 } } ;
// If you want to prefer front camera
html5QrCode . start ( { facingMode : "user" } , config , qrCodeSuccessCallback ) ;
Html5QrcodeScanner
仅扫描 QR 码和 UPC 码 function onScanSuccess ( decodedText , decodedResult ) {
// Handle the scanned code as you like, for example:
console . log ( `Code matched = ${ decodedText } ` , decodedResult ) ;
}
const formatsToSupport = [
Html5QrcodeSupportedFormats . QR_CODE ,
Html5QrcodeSupportedFormats . UPC_A ,
Html5QrcodeSupportedFormats . UPC_E ,
Html5QrcodeSupportedFormats . UPC_EAN_EXTENSION ,
] ;
const html5QrcodeScanner = new Html5QrcodeScanner (
"reader" ,
{
fps : 10 ,
qrbox : { width : 250 , height : 250 } ,
formatsToSupport : formatsToSupport
} ,
/* verbose= */ false ) ;
html5QrcodeScanner . render ( onScanSuccess ) ;
该库现在支持一些实验性功能,这些功能在库中受支持,但由于测试有限或所使用的底层 API 的兼容性有限,不建议用于生产使用。在这里阅读更多相关信息。一些实验性功能包括:
代码更改只能对 /src 进行。
运行npm install
以安装所有依赖项。
运行npm run-script build
来构建 JavaScript 输出。输出 JavaScript 发行版构建为 /dist/html5-qrcode.min.js。如果您在 Windows 操作系统上进行开发,请运行npm run-script build-windows
。
测试
npm test
发送拉取请求
./src
代码更改。不要手动更改./dist
。 @all-contributors please add @mebjas for this new feature or tests
您可以通过多种方式为该项目做出贡献:
如果没有我们所有出色的贡献者和赞助商,这个项目就不可能实现。如果您想支持该项目的维护和保养,可以通过 GitHub 赞助商进行捐赠。
赞助该项目,以优先考虑与您相关的功能请求/错误。 (取决于询问范围和贡献者的带宽)。
通过支持该项目的赞助目标来帮助激励功能开发和错误修复。请参阅此处赞助的功能请求列表。
另外,非常感谢以下组织的非金钱赞助
用于读取二维码的解码器来自Zxing-js
https://github.com/zxing-js/library