canvas实现二维码和图片合成的示例代码


Posted in HTML / CSS onAugust 01, 2018

上个版本街道一个需求,使用url生成一个二维码,然后和另外一张图片合成一张图拍你,

实现思路是这样的

  1. 使用jr-qrcode将url生成data:base64供img使用
  2. 然后使用canvas 将两张图合成一张图片

遇到的问题

生成图片之后发现图片很模糊,解决办法是将canvas画布扩大两倍,其他参数也夸大两倍就可以了

jr-qrcode 可以使用npm install --save jr-qrcode 安装这个包

作用就是可以转化text到data:base64 供img的src 使用

代码如下

import React, { Component } from 'react'
const qrcode = require('jr-qrcode')
const loadImg = (src) => {
    const paths = Array.isArray(src) ? src : [src];
    const promise = [];
    paths.forEach((path) => {
        promise.push(new Promise((resolve, reject) => {
            let img = new Image();
            img.crossOrigin = "Anonymous";
            img.src = path;
            img.onload = () => {
                resolve(img);
            };
            img.onerror = (err) => {
                console.log('图片加载失败')
            }
        }))
    });
    return Promise.all(promise);

}
const getImageData = (url, src) => {
    const imgsrc = qrcode.getQrBase64(url)
    let canvas = document.createElement('canvas')
    const width = document.documentElement.clientWidth
    const height = document.documentElement.clientHeight
    canvas.width = width*2
    canvas.height = height*2
    let ctx = canvas.getContext("2d")
     loadImg([imgsrc, src]).then(([img1, img2]) => {
        ctx.drawImage(img2, 0, 0, width*2, height*2)
        ctx.drawImage(img1, width-80, height*2-220, 200, 160)
        ctx.fillStyle = 'rgba(0,0,0,0.3)';
        ctx.fillRect(width-80, height*2-60, 200, 40);
        ctx.save()
        ctx.font="28px Arial"
        ctx.fillStyle = '#fff';
        ctx.fillText('长按识别二维码', width-80, height*2-30, 200, 160)
        let imageURL = canvas.toDataURL("image/png")
        document.getElementById('mix_img').setAttribute('src',imageURL)
    })
}
export default class QRcode extends Component {
    render() {
        const { url , picSrc} = this.props
        getImageData(url,picSrc)
        return (
            <div>
                <img  alt='mix_img' id='mix_img'/>
            </div>
        )
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3实现垂直下拉动画菜单示例
Apr 22 HTML / CSS
css3 伪元素和伪类选择器详解
Sep 04 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
Apr 05 HTML / CSS
CSS3自定义滚动条样式的示例代码
Aug 21 HTML / CSS
浅谈css3新单位vw、vh、vmin、vmax的使用详解
Dec 01 HTML / CSS
基于HTML5 FileSystem API的使用介绍
Apr 24 HTML / CSS
html5中canvas图表实现柱状图的示例
Nov 13 HTML / CSS
html5中audio支持音频格式的解决方法
Aug 24 HTML / CSS
html5利用canvas实现颜色容差抠图功能
Dec 23 HTML / CSS
CSS 新特性 contain控制页面的重绘与重排问题
Apr 30 HTML / CSS
通过feDisplacementMap和feImage实现水波特效
Apr 24 HTML / CSS
使用CSS实现六边形的图片效果
Aug 05 HTML / CSS
HTML5拖拽功能实现的拼图游戏
Jul 31 #HTML / CSS
Html5页面二次分享的实现
Jul 30 #HTML / CSS
利用Storage Event实现页面间通信的示例代码
Jul 26 #HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
Jul 24 #HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 #HTML / CSS
html5 input输入实时检测以及延时优化
Jul 18 #HTML / CSS
利用canvas实现图片压缩的示例代码
Jul 17 #HTML / CSS
You might like
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
python扫描线填充算法详解
2020/02/19 Python
为什么称python为胶水语言
2020/06/16 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
介绍下java.util.Arrays类
2012/10/16 面试题
最新党员的自我评价分享
2013/11/04 职场文书
初中三好学生事迹材料
2014/01/13 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2014年医生工作总结
2014/11/21 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
烈士陵园观后感
2015/06/08 职场文书
标准发言稿结尾
2019/07/18 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS