网站首页 > 基础教程 正文
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 jscanify
Open-source pure Javascript implemented mobile document scanner. Powered with opencv.js. Supports the web, NodeJS, React, and others.
jscanify 是开源的纯 Javascript 实现的移动文档扫描仪,由 opencv.js 提供支持,支持: Web、NodeJS、React 等环境。
jscanify 的典型特征包括:
- 纸张检测和突出显示
- 带畸变校正的纸张扫描
目前 jscanify 在 Github 通过 MIT 协议开源,有超过 1k 的 star,是一个值得关注的前端开源项目。
如何使用 jscanify
首先导入相应的库:
$ npm i jscanify
// 安装 jscanify 然后导入
import jscanify from 'jscanify'
使用起来也非常简单:
const scanner = new jscanify();
// image的onload触发后可以调用方法
image.onload = function () {
const highlightedCanvas = scanner.highlightPaper(image);
document.body.appendChild(highlightedCanvas);
};
以上 image 元素表示图片对象,即 <img src="/path/to/your/image.png" id="image" />。
当然,jscanify 还支持在用户相机中突出显示纸张。以下代码不断从用户的相机读取数据并突出显示纸张:
<video id="video"></video>
<canvas id="canvas"></canvas>
// 原始视频
<canvas id="result"></canvas>
// 高亮后的视频
以下是利用 navigator.mediaDevices.getUserMedia 获取用户摄像头数据的示例:
const scanner = new jscanify();
const canvasCtx = canvas.getContext("2d");
const resultCtx = result.getContext("2d");
navigator.mediaDevices.getUserMedia({video: true}).then((stream) => {
video.srcObject = stream;
video.onloadedmetadata = () => {
video.play();
setInterval(() => {
canvasCtx.drawImage(video, 0, 0);
const resultCanvas = scanner.highlightPaper(canvas);
resultCtx.drawImage(resultCanvas, 0, 0);
}, 10);
};
});
当然,开发者还可以通过利用 jsPDF 库和 toDataURL 函数来实现导出为 PDF 的目的。
download.addEventListener("click", function() {
// jsPDF 只支持 jpeg
var imgData = canvas.toDataURL("image/jpeg", 1.0);
var pdf = new jsPDF();
pdf.addImage(imgData, 'JPEG', 0, 0);
pdf.save("download.pdf");
}, false);
更多关于 jscanify 的用法和示例可以参考文末资料,本文不再过多展开.
参考资料
https://github.com/ColonelParrot/jscanify
https://colonelparrot.github.io/jscanify/
https://stackoverflow.com/questions/23681325/convert-canvas-to-pdf
猜你喜欢
- 2025-01-23 Kubernetes数据卷与持久卷(kubernetes 持久化存储组件)
- 2025-01-23 SpringCloud 网关组件 Gateway 原理深度解析
- 2025-01-23 【温达】插件制作-添加系统级菜单
- 2025-01-23 js 调用本地摄像头通过canvas进行截图
- 2025-01-23 比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load
- 2025-01-23 kratos源码分析系列(1)(leakcanary源码分析)
- 2025-01-23 JVM实战—12.OOM的定位和解决(jvm oom dump)
- 2025-01-23 js扫描识别条形码(js实现扫一扫)
- 2025-01-23 centos7安装python3(centos7安装步骤)
- 2025-01-23 Spring AOP 中的代理对象是怎么创建出来的?
- 05-162025前端最新面试题之HTML和CSS篇
- 05-16大数据开发基础之HTML基础知识
- 05-16微软专家告诉你Win10 Edge浏览器和EdgeHTML的区别
- 05-16快速免费将网站部署到公网方法(仅支持HTML,CSS,JS)
- 05-16《从零开始学前端:HTML+CSS+JavaScript的黄金三角》
- 05-16一个简单的标准 HTML 设计参考
- 05-16css入门
- 05-16前端-干货分享:更牛逼的CSS管理方法-层(CSS Layers)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)