资讯专栏INFORMATION COLUMN

canvas实现二维码和图片合成

JohnLui / 1329人阅读

摘要:上个版本街道一个需求,使用生成一个二维码,然后和另外一张图片合成一张图拍你,实现思路是这样的使用将生成供使用然后使用将两张图合成一张图片遇到的问题生成图片之后发现图片很模糊,解决办法是将画布扩大两倍,其他参数也夸大两倍就可以了可以使用

上个版本街道一个需求,使用url生成一个二维码,然后和另外一张图片合成一张图拍你,
实现思路是这样的

使用jr-qrcode将url生成data:base64供img使用

然后使用canvas 将两张图合成一张图片

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

jr-qrcode 可以使用npm install --save jr-qrcode 安装这个包
作用就是可以转化text到data:base64 供img的src 使用

代码如下

</>复制代码

  1. import React, { Component } from "react"
  2. const qrcode = require("jr-qrcode")
  3. const loadImg = (src) => {
  4. const paths = Array.isArray(src) ? src : [src];
  5. const promise = [];
  6. paths.forEach((path) => {
  7. promise.push(new Promise((resolve, reject) => {
  8. let img = new Image();
  9. img.crossOrigin = "Anonymous";
  10. img.src = path;
  11. img.onload = () => {
  12. resolve(img);
  13. };
  14. img.onerror = (err) => {
  15. console.log("图片加载失败")
  16. }
  17. }))
  18. });
  19. return Promise.all(promise);
  20. }
  21. const getImageData = (url, src) => {
  22. const imgsrc = qrcode.getQrBase64(url)
  23. let canvas = document.createElement("canvas")
  24. const width = document.documentElement.clientWidth
  25. const height = document.documentElement.clientHeight
  26. canvas.width = width*2
  27. canvas.height = height*2
  28. let ctx = canvas.getContext("2d")
  29. loadImg([imgsrc, src]).then(([img1, img2]) => {
  30. ctx.drawImage(img2, 0, 0, width*2, height*2)
  31. ctx.drawImage(img1, width-80, height*2-220, 200, 160)
  32. ctx.fillStyle = "rgba(0,0,0,0.3)";
  33. ctx.fillRect(width-80, height*2-60, 200, 40);
  34. ctx.save()
  35. ctx.font="28px Arial"
  36. ctx.fillStyle = "#fff";
  37. ctx.fillText("长按识别二维码", width-80, height*2-30, 200, 160)
  38. let imageURL = canvas.toDataURL("image/png")
  39. document.getElementById("mix_img").setAttribute("src",imageURL)
  40. })
  41. }
  42. export default class QRcode extends Component {
  43. render() {
  44. const { url , picSrc} = this.props
  45. getImageData(url,picSrc)
  46. return (
  47. )
  48. }
  49. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96328.html

相关文章

  • canvas绘制海报+维码,满足绝大部分场景

    摘要:无需任何第三方依赖,轻型工具库。绘制海报,生成带的二维码。默认重新编辑最终图片压缩比,默认基础类型参数表示一个图片部分。之间表示一个二维码部分参数类型描述指定为二维码类型要绘制的内容。通过控制边框颜色,默认为默认为容错等级。 canvas_x 无需任何第三方依赖,轻型工具库。canvas绘制海报,生成带logo的二维码。也可生成编辑界面,用户自定义输入,一键生成等等 默认开启图片跨域,...

    bluesky 评论0 收藏0
  • 微信小程序 海报生成踩坑记

    摘要:最近有个需求是要生成分享海报,让用户可以将图片保存到本地然后分享到朋友圈。本来以为是一个很简单的需求,可是万万没想到,微信会这么坑。 最近有个需求是要生成分享海报,让用户可以将图片保存到本地然后分享到朋友圈。本来以为是一个很简单的需求,可是万万没想到,微信会这么坑。刚开始的思路是这样的: 后台根据小程序传过来的参数获取对应的小程序码,然后与背景图合成之后将base64格式的图片传给小程...

    lidashuang 评论0 收藏0

发表评论

0条评论

JohnLui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<