React动态生成二维码和毫米(mm)单位转像素(px)单位

news2024/12/23 15:20:07

一、使用qrcode.react生成二维码,qrcode.react - npm

很简单,安装依赖包,然后引用就行了

npm install qrcode.react

或者

yarn add qrcode.react

直接上写好的代码

import React, {useEffect, useState} from 'react';
import QRCode from 'qrcode.react'


/**
 * 二维码组件,使用memo函数包裹减少渲染,优化性能
 * @since 20231107
 * @author QC班长
 */
export type QRCodeImageProps = {
  url: string,//需要转为二维码的h5链接
  size?: number,//二维码的大小 单位px,不传默认138px
  fgColor?: string,//二维码的颜色 不传默认黑色
}
export default React.memo(function QRCodeImage({url, size, fgColor}: QRCodeImageProps) {

  //随机数id
  const [randomId, setRandomId] = useState<string>('')
  //生成的二维码图片链接
  const [qrcodeUrl, setQrcodeUrl] = useState<string>('')

  //生成随机数id
  const uuid = () => {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
      const r:number = (Math.random() * 16) | 0
      const v:number = c === 'x' ? r : (r & 0x3) | 0x8
      return v.toString(16)
    })
  }

  useEffect(() => {
    setRandomId(uuid())
  }, [])

  useEffect(() => {
    //获取canvas类型的二维码
    const canvasImg = document.getElementById(randomId) as HTMLCanvasElement
    //将canvas对象转换为图片的data url
    setQrcodeUrl(canvasImg?.toDataURL('image/png'))
  }, [randomId, size])

  return (
    <>
      <div style={{position: 'absolute', opacity: '0', zIndex: '-100'}}>
        {url && randomId && (
          <QRCode
            id={randomId}
            value={url}
            size={size ?? 138} // 二维码的大小
            fgColor={fgColor ?? '#000000'} // 二维码的颜色
            style={{margin: 'auto', backgroundColor: 'white', padding: '10px'}}/>
        )}
      </div>
      <img src={qrcodeUrl} alt={url}/>
    </>
  )

})

使用传入URL就行,size可自己定

 二、将以毫米(mm)为单位的数值转换为像素(px)

1. 首先,需要确定当前屏幕的像素密度(pixel density)。常见的像素密度是每英寸像素数(PPI)为 96。可以根据实际情况进行调整。

2. 然后,可以使用以下公式将毫米转换为像素:

像素 = 毫米 * (像素密度 / 25.4)


   例如,如果想将 10 毫米转换为像素,且像素密度为 96 PPI,那么计算方式如下:

像素 = 10 * (96 / 25.4) ≈ 37.7952755906 px


所以,在代码中将毫米转换为像素,可以使用上述公式进行计算。将这个转换过程封装成一个过滤器或者自定义方法,以便在模板中直接调用和使用。

 参考文献:

1、Vue中将以毫米(mm)为单位的数值转换为像素(px)_beyondjxx的博客-CSDN博客

2、使用qrcode.react动态自动生成二维码-CSDN博客 

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

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

相关文章

MySQL中的datetime和timestamp有什么区别

相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储服务器当前的时区. 而timesta…

leetcode:2278. 字母在字符串中的百分比(python3解法)

难度&#xff1a;简单 给你一个字符串 s 和一个字符 letter &#xff0c;返回在 s 中等于 letter 字符所占的 百分比 &#xff0c;向下取整到最接近的百分比。 示例 1&#xff1a; 输入&#xff1a;s "foobar", letter "o" 输出&#xff1a;33 解释&…

解决ntfs-3g-mount: mount failed硬盘无法挂载的问题

操作系统&#xff1a;ubuntu 20.04 遇到的问题&#xff1a;开机后挂载usb外接硬盘失败&#xff08;外接硬盘盒&#xff09;&#xff0c;报错&#xff1a;ntfs-3g-mount: mount failed: Device or resource busy 问题原因&#xff1a;openwrt容器&#xff08;--restart always&a…

无人机航迹规划:小龙虾优化算法COA求解无人机路径规划MATLAB(可以修改起始点,地图可自动生成)

一、小龙虾优化算法COA 小龙虾优化算法&#xff08;Crayfsh optimization algorithm&#xff0c;COA&#xff09;由Jia Heming 等人于2023年提出&#xff0c;该算法模拟小龙虾的避暑、竞争和觅食行为&#xff0c;具有搜索速度快&#xff0c;搜索能力强&#xff0c;能够有效平衡…

【Devchat-AI】编程得力助手,DevChat会让你对编程有新理解新认识

2023年&#xff0c;注定是一个AI大语言模型百花齐发的一年&#xff0c;从chatGPT开始&#xff0c;紧随其后&#xff0c;文心一言&#xff0c;通义千问&#xff0c;星火等等都发布了各自的语言大模型&#xff0c; 各有优势&#xff0c;但也能看出来&#xff0c;还有很多长的路要…

记一次经典SQL双写绕过题目[极客大挑战 2019]BabySQL 1

题目环境&#xff1a; 作者已经描述进行了严格的过滤 做好心理准备进行迎接 判断注入类型 admin 1’ 字符型注入万能密码注入 admin 1’ or ‘1’1 报错 已经是字符型注入了&#xff0c;所以的话只有or这里存在了过滤 联想到buuctf里面还没有碰到双写绕过的题目 所以这里斗胆试…

创建asp.net core mvc项目

一、安装vs2019 百度搜索【visual studio社区版下载】&#xff0c;进入微软官网 二、安装环境 运行vs2019,点击“工具”->“获取工具和功能” 三、打开vs2019 1.“文件”->“新建”->“项目”-> “ASP.Net Core Web 应用&#xff08;模型-视图-控制器&#xff09…

Linux运维常见故障排查方法及修复大全二部

⼀、系统故障 1. linux系统⽆法启动 原因1: ⽂件系统配置不当,⽐如/etc/fstab⽂件等配置错误或丢失,导致系统错误⽆法启动。⼀般是⼈为修改错误 或者⽂件系统故障。 排查⽅法:系统配置/etc/fstab错误或丢失⽽⽆法启动,当启动的时候,出现starting system logger后停⽌了…

Springboot中解析JSON字符串(jackson库ObjectMapper解析JSON字符串)

1、ObjectMapper与JSONObject比较 1、ObjectMapper属于jackson库的一部分,JSONObject属于alibaba的fastjson&#xff0c;两者各有优劣&#xff0c;可根据自己的系统环境选择使用哪种技术。 2、目前来看&#xff0c;Jackson社区相对活跃&#xff0c;Spring MVC和Spring Boot都…

【大数据】NiFi 中的处理器(一):GenerateTableFetch

NiFi 中的处理器&#xff08;一&#xff09;&#xff1a;GenerateTableFetch 1.简介2.应用场景3.示例3.1 案例一&#xff1a;无输入流文件&#xff0c;来源表含增量字段3.2 案例二&#xff1a;无输入流文件&#xff0c;不含增量字段3.3 案例三&#xff1a;无输入流文件&#xf…

java计算机毕业设计SpringBoot在线答疑系统

项目介绍 本文从学生的功能要求出发&#xff0c;建立了在线答疑系统&#xff0c;系统中的功能模块主要是实现管理员权限&#xff1b;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理。教师权限&#xff1a;首页、个人中心、疑难解答管理、试卷管理、试题管理…

VUE3 TypeError: defineConfig is not a function

VUE3 TypeError: defineConfig is not a function 1. 问题2. 原因3. 解决 1. 问题 在运行npm run serve时&#xff0c;出现报错&#xff1a; 2. 原因 原因&#xff1a;由于用vue-cli直接创建了vue 3的项目&#xff0c;而里面的生态并非都是最新版&#xff0c;vue.config.js…

Linux安装DMETL4

Linux安装DMETL4 产品与环境介绍1 规划安装路径2 DM8安装路径2.1 达梦数据库程序安装路径2.2 初始化达梦数据库2.3 创建数据库用户名 DMETL 3 安装DMETL3.1 查看安装包与授权3.2 安装DMETL程序3.3 DMETL安装日志 4 启动DMETL5 DMETL连接数据库后会自动创建相关资源表6 达梦数据…

罗纳尔多正式签约K体育,联手打造线上体育娱乐E时代

近日&#xff0c;业内知名线上体育娱乐平台K体育kty09迎来喜讯&#xff0c;足坛传奇球星罗纳尔多正式成为品牌全球形象大使。本次合作对双方均有重要意义&#xff0c;更成为了线上体育娱乐平台与传奇球星合作的优秀典范&#xff0c;为整个行业带来全新启发。 自成立以来&#x…

季节性壁炉布置:让您的家温馨如冬季仙境

1、主题化的壁炉装饰&#xff1a;根据不同节令或假日&#xff0c;您可以为壁炉布置不同的主题。比如&#xff0c;在圣诞季节&#xff0c;您可以放置圣诞装饰品&#xff0c;烛台和彩灯&#xff0c;打造温馨的圣诞壁炉。在万圣节&#xff0c;尝试用各种吓人的装饰&#xff0c;如假…

11 传输层协议

1、传输层里比较重要的两个协议&#xff0c;一个是 TCP&#xff0c;一个是UDP 对于不从事底层开发的人员来讲&#xff0c;或者对于开发应用的人来讲&#xff0c;最常用的就是这两个协议。 2、TCP 和 UDP 有哪些区别&#xff1f; 1.TCP 是面向连接的&#xff0c;UDP 是面向无…

Jmeter_逻辑控制器

逻辑控制器 控制取样器执行顺序的组件实现(分支 循环) 分类 1、如果(if) 控制器 分支实现 2、forEach控制器 循环往复实现 3、循环控制器 循环往复实现 如果(if) 控制器 需求1:测试计划中定义一个 http 请求访问百度&#xff0c;但是该请求不是无条件执行的&#xff0c;…

SCI论文投稿经验分享,建议收藏!

对医药学专业的学生而言&#xff0c;让自己的医学论文在SCI期刊发表关乎评优、申学&#xff0c;十分重要。笔者根据多位常笑医学网用户的SCI论文投稿经历&#xff0c;汇总了一些SCI论文投稿经验与大家分享。 投稿前的准备工作很必要 用好查刊选刊工具效率翻倍 首先&#xff0c…

SpringBoot整合Kafka (二)

&#x1f4d1;前言 本文主要讲了SpringBoot整合Kafka文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ 上文链接&#xff1a;SpringBoot整合Kafka (一) &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页…

图论——并查集

参考内容&#xff1a; 图论——并查集(详细版) 并查集&#xff08;Disjoint-set&#xff09;是一种精巧的树形数据结构&#xff0c;它主要用于处理一些不相交集合的合并及查询问题。一些常见用途&#xff0c;比如求联通子图、求最小生成树的 Kruskal 算法和求最近公共祖先&…