vue实现输入网址生成二维码、解码、下载、更改功能

news2024/7/6 18:00:41

功能:

1.输入网址生成二维码

2.二维码可以下载

3.可以更改二维码中心的图片

4.可以通过本地相册的二维码进行解码

1.下载三个插件

下载vue-qr,用于生成二维码

npm install vue-qr

下载vue-jimp并指定版本号,最新版不行,实现不了 。Jimp 库读取图片数据。Jimp 是一个用于处理图像的 JavaScript 库,它可以从数据中创建图像对象。

npm install jimp@0.16.1

下载jsqr,用于将二维码进行解码

npm install jsqr

2.完整代码如下

不太好讲我直接做了注释,看注释应该能看懂吧

<template>
    <div class="content-box">
        <div class="container">
            <h1>二维码输入网址生成、下载</h1>
            <el-row>
                <el-col :span="6">
                    <el-input v-model="text" placeholder="输入要生成二维码的网址"></el-input>
                </el-col>
                <el-col :span="4" :push="1">
                    <el-button><a :href="href" target="_blank" download="已下载二维码" rel="noopener noreferrer">下载二维码</a></el-button>
                </el-col>
                <el-col :span="4" :push="1">
                    <input
                        type="file"
                        @change="updateImg"
                        name="file"
                        class="element"
                        accept="image/gif,image/jpeg,image/jpg,image/png,image/svg"
                    />
                </el-col>
            </el-row>
            <el-row style="margin-top: 20px;">
                <el-col :span="6">
                    <vue-qr
                        qid="qrid"
                        :text="text"
                        :size="size"
                        :bgSrc="bgSrc"
                        :logoSrc="logoSrc"
                        :callback="callBack"
                        :logoScale="logoScale"
                        :colorDark="colorDark"
                        :colorLight="colorLight"
                        :backgroundColor="backgroundColor"
                    ></vue-qr>
                </el-col>
            </el-row>
            <hr />
            <h2>解析二维码</h2>
            <el-row style="margin-top: 20px;">
                <el-col :span="6">
                    <input type="file" @change="upload($event)" />
                </el-col>
            </el-row>
            <img :src="image" alt="" srcset="" />
            {{ result }}
        </div>
    </div>
</template>

<script>
import VueQr from 'vue-qr';
import Jimp from 'jimp';
import jsQR from 'jsqr';
export default {
    components: {
        VueQr
    },
    data() {
        return {
            href: '',
            text: 'https://element.eleme.cn/#/zh-CN/component/table', // 二维码内容
            size: 150, // 二维码宽高尺寸, 长宽一致, 包含外边距
            bgSrc: '', // 嵌入背景图地址,
            logoSrc: 'https://tse2-mm.cn.bing.net/th/id/OIP-C.mH9YLFEL5YdVxJM82mjVJQAAAA?pid=ImgDet&rs=1', // 嵌入至二维码中心的 LOGO 地址
            margin: 0, // 二维码图像的外边距, 默认20px
            colorDark: '#484848', // 实点的颜色,必须设置深色,浅色会识别不出来
            colorLight: '#42B983', // 空白区的颜色
            backgroundColor: '#EEE', // 背景色
            logoScale: 0.15, // 中间图的尺寸,不要设太大,太大会导致扫码失败的 默认0.2
            dotScale: 0.35, // 数据区域点缩小比例,默认为0.35
            imgUrl: '', //
            result: '',
            image: ''
        };
    },
    mounted() {},
    methods: {
        callBack(base64, pid) {
            this.href = base64;
            console.log(base64, pid);
        },
        // 上传二维码
        upload(event) {
            const file = event.target.files[0];
            this.result = '';
            // 创建一个新的filereader对象,用于读取文件内容
            const fReader = new FileReader();
            // 将选定的文件读取为数据 URL。这将读取文件的内容,并将其转换为 Base64 编码的字符串。这个 Base64 字符串可以用于展示图片,或者上传到服务器。
            fReader.readAsDataURL(file);
            // 文件读取完后执行的回调函数
            fReader.onload = e => {
                console.log(e, '图片回调');
                // 将读取的的文件内容base64编码字符串赋值给image变量,展示图片
                this.image = e.target.result;
                // 使用 Jimp 库读取图片数据。Jimp 是一个用于处理图像的 JavaScript 库,它可以从数据中创建图像对象。
                Jimp.read(e.target.result)
                    .then(async res => {
                        console.log(res, 'jimp的图像对象');
                        const { data, width, height } = res.bitmap;
                        try {
                            // 使用 jsQR 库对图像中的二维码进行解码。得到图片原本的数据,data是地址
                            const resolve = await jsQR(data, width, height);
                            console.log(resolve, 'zabuzou1l1-------');
                            this.result = resolve.data;
                            console.log(this.result, '得到数据');
                        } catch (err) {
                            this.result = '识别失败,重新传二维码';
                        }
                    })
                    .catch(err => {
                        console.error('文件读取错误', err);
                    });
            };
        },
        updateImg(event) {
            // 声明了一个名为 createObjectURL 的变量,它是一个用于创建临时 URL 的函数。这里使用了多个浏览器前缀的不同实现,以兼容不同的浏览器。
            const file = event.target.files[0];
            const createObjectURL = window.createObjectURL || window.URL.createObjectURL || window.webkitURL.createObjectURL;
            // 使用之前声明的 createObjectURL 函数创建一个临时 URL,将其赋值给 logoSrc 变量
            this.logoSrc = createObjectURL(file);
        }
    }
};
</script>

<style lang="scss" scoped>
.avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
}
.avatar-uploader .el-upload:hover {
    border-color: #409eff;
}
.avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
}
.avatar {
    width: 178px;
    height: 178px;
    display: block;
}
.canvas {
    width: 200px;
    height: 200px;
}
</style>

3.效果

 文章到此结束,希望对你有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中yum、dnf、rpm

yum 1、看是否安装了某些东西 yum list all | grep php

一篇文章带你从入门都入土 Kafka 消息中间件(原理+代码)

目录 一、Kafka定义 二、消息队列 三、Kafka基础架构图 四、安装Kafka 4.1 为每台服务器下载Kafka并解压 4.2 查看目录结构 4.3 为每台服务器修改配置文件server.properties 4.4 为每台服务器配置Kafka环境变量 4.5 启动zookeeper集群 4.6 启动Kafka集群 4.7 关闭Ka…

IDEA初次连接Redis配置

解决IDEA报错代码&#xff1a;redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 192.168.127.185:6379 第一步、引入jedis依赖 <!--引入jedis依赖--> <dependencies><dependency><groupId>redis.clients</gr…

天数智芯通用GPU产品天垓100与飞桨完成III级兼容性测试,加速人工智能产业生态建设

近日&#xff0c;上海天数智芯半导体有限公司&#xff08;以下简称“天数智芯”&#xff09;通用 GPU 产品天垓 100 与飞桨已完成 III 级兼容性测试。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是天数智芯加入“飞桨硬件生态共创计划 ”后的阶段…

Tensor core原理

什么是Tensorcore Tensor core是nvidia底层执行运算的硬件单元&#xff0c;不同于nvidia以往的cuda core(全浮点型&#xff09;&#xff0c;Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件&#xff1b; 什么是混合精度 混合精度指的是在输入、输…

电脑出现0xC1900101错误怎么办?

在更新或安装Windows操作系统时&#xff0c;有时系统会提示出现了0xC1900101错误。这个错误的出现通常是源于与驱动程序相关的错误所致。那么当电脑出现0xC1900101错误时该怎么办呢&#xff1f; 为什么会出现错误代码0xC1900101&#xff1f; 通常情况下&#xff0c;有以下几个…

Java重点:反射机制的使用

目录 一、概念 二、类类 1、类类的获取方式 1&#xff09;类名.Class 2&#xff09;对象.getClass() 3&#xff09;Class.forName() 三、反射实例化 1、调用一个公有的无参构造方法 2、调用一个公有的一个参构造方法 3、调用一个公有的两个参构造方法 4、调用一个私有…

gitee(码云)如何生成并添加公钥

一&#xff0c;简介 在使用Gitee的时候&#xff0c;公钥是必须的&#xff0c;无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器。供参考。 二&#xff0c;步骤介绍 2.1 本地生成公钥 打开git bash 输入以下代码回车三次&#xff1a; # 替换为你自己的邮箱…

opencv特征检测 HOG特征算法

1 HOG特征简介 Hog 算法的工作原理是创建图像中梯度方向分布的柱状图&#xff0c;然后以一种非常特殊的方式对其进行归一化。这种特殊的归一化使得Hog 能够有效地检测物体的边缘&#xff0c;即使在对比度很低的情况下也是如此。这些标准化的柱状图被放在一个特征向量&#xff…

51单片机的数字时钟系统【含仿真+程序+报告】

51单片机的数字时钟系统【含仿真程序报告】 1、 系统组成2、功能概述3、仿真4、程序代码5、报告6、资源链接 1、 系统组成 该系统由AT89C51单片机DS1302时钟模块按键模块DS18B20LCD显示模块构成。 2、功能概述 可显示实时的日期 包括 年-月-日 时分秒 星期 农历时间DS18B20室…

将图像2D转换为3D--LeiaPix Converter

LeiaPix Converter是一款免费的在线图像处理工具&#xff0c;可帮助用户将2D图像实时转换为精美的3D光场图像。 它使用由Leia开发的专有算法&#xff0c;为照片、插画和艺术作品等2D图像添加深度和立体感&#xff0c;目前是完全免费的。 LeiaPix Converter 的特点 多格式转换…

安全多方计算、联邦学习和可信执行环境

目录 隐私计算的三大技术流派&#xff1a;联邦学习、安全多方计算、可信计算 隐私计算的三大技术流派&#xff1a;联邦学习、安全多方计算、可信计算 1.多方安全计算&#xff0c;由姚期智院士于1982年首次提出&#xff0c;通过设计特殊的加密算法和协议&#xff0c;在无可信第…

Java 已知文件路径参数,用两种方法获取文件名

一、先获取带扩展名的fileName String filePath "D:\\manage\\uploadFile\\2023-06-28283\\初测.xlsx"; File file new File(filePath); // 或者 Path path Paths.get(filePath);String fileName1 file.getName(); System.out.println(fileName1);Path fileName…

Jmeter线程组配置

目录 前言&#xff1a; 一、线程组配置字段说明 二、线程组配置示例 前言&#xff1a; JMeter是一款开源的压力测试工具&#xff0c;被广泛应用于测试Web应用程序的性能和负载能力。其中线程组是JMeter中最基本、最重要的功能之一。线程组用于模拟多个并发用户对目标应用程…

Bryntum Scheduler Pro 5.3.5 Crack-专业调度组件

BRYNTUM Scheduler Pro调度程序专业版 专业的日程安排小部件 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务&#xff0c;同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任何任务限制。这…

echarts——折线图点击线触发函数getZr()——技能提升

今天看到技术群里在讨论echarts中的折线图&#xff0c;有人遇到一个功能就是点击折线要触发点击事件&#xff0c;但是官网上的click点击事件只针对折线的拐点。 但是有人提出是可以通过getZr()方法来实现 网上也确实有大神提出一样的解决方法&#xff0c;链接如下&#xff1…

属鸡的脾气性格怎么样?

有的人认为属鸡的人脾气暴躁&#xff0c;而有的认为属鸡的人性格温和&#xff0c; 其实属鸡的人都有两面性&#xff0c;对好人善良温情&#xff0c;对坏人则腹黑邪恶&#xff0c;是不是很惊讶&#xff1f;古人认为鸡有预报能力&#xff0c;此种预言能力在鸡年生的人身上也会出现…

Stable Diffusion 使用outpainting扩展图像

通常SD可以应用绘制的图像是固定分辨率的&#xff0c;但是如果想要超出这个分辨率的话那就要使用一些方法&#xff0c;并且如果还想保持这些图片的连贯性&#xff0c;例如背景就要使用到outpainting。 文章目录 操作流程准备图像 操作流程 准备图像 首先将需要扩展边缘的图像…

能查看历史记录的好用的笔记app是哪款?

当我回顾自己经常做笔记的习惯时&#xff0c;我发现一个问题困扰着我&#xff1a;如何方便地查看和管理历史记录&#xff1f;因为对于我这样一个频繁记录学习和工作笔记的人来说&#xff0c;回顾过去的记录是一种宝贵的学习和反思机会。能查看历史记录的好用的笔记app是哪款&am…

Junit基本使用

文章目录 0. 了解Junit51. 注解2. 断言3. 用例执行顺序4. 测试套件&#xff08;Suite&#xff09;5.参数化 0. 了解Junit5 Java版本最低要求为8。Junit是一个开源的java语言的单元测试框架。java方向使用最广泛的单元测试框架。使用java开发者都应当学习Junit并且掌握单元测试…