先看下效果图:(上面灰色块内的用div和CSS写出来的,然后绘制到canvas)

实现此功能需要使用到一个微信小程序的插件,插件官方文档地址:

wxml-to-canvas | 微信开放文档

本博客代码环境,uniapp(vue)

实现流程:

1.创建uniapp项目,命名为 (htmlToCarvasDemo

2.Alt + C 打开终端,运行 npm i x-wxml-to-canvas,安装插件

npm i x-wxml-to-canvas

3.在index目录添加,demo.js 文件,代码为 

const wxml = `
<view class="container" ><view class="item-box red"></view><view class="item-box green" ><text class="text">yeah!</text></view><view class="item-box blue"><image class="img" src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3582589792,4046843010&fm=26&gp=0.jpg"></image></view>
</view>
`const style = {container: {width: 300,height: 200,flexDirection: 'row',justifyContent: 'space-around',backgroundColor: '#ccc',alignItems: 'center',},itemBox: {width: 80,height: 60,},red: {backgroundColor: '#ff0000'},green: {backgroundColor: '#00ff00'},blue: {backgroundColor: '#0000ff',alignItems: 'center',justifyContent: 'center',},text: {width: 80,height: 60,textAlign: 'center',verticalAlign: 'middle',},img: {width: 40,height: 40,borderRadius: 20,}
}module.exports = {wxml,style
}

4.编辑index.vue

<template><view class="content"><xWxmlToCanvas ref="xWxmlToCanvas" :hide="false" :width="width" :height="height" :xStyle="style" :xWxml="wxml"></xWxmlToCanvas><!-- <button @click="renderToCanvas">渲染到canvas</button> --><button @click="extraImage">导出图片</button><image :src="src" :style="{width: width, height: height}"></image></view>
</template><script>import xWxmlToCanvas from '@/node_modules/x-wxml-to-canvas/x-wxml-to-canvas';const {wxml,style} = require('./demo.js')export default {components: {xWxmlToCanvas},data() {return {wxml: wxml,style: style,width: 300,height: 200,src: "",}},onReady() {setTimeout(()=>{this.renderToCanvas()},1000)},methods: {renderToCanvas() {const p1 = this.$refs.xWxmlToCanvas.renderToCanvas() //渲染至canvasp1.then(res => {console.log('res', res)})},extraImage() {const p2 = this.$refs.xWxmlToCanvas.canvasToTempFilePath()console.log('p2', p2)p2.then(res => {console.log('res', res)this.src = res;})},// canvasToTempFilePath() {// this.$refs.xWxmlToCanvas.canvasToTempFilePath() //生成图片// this.$refs.xWxmlToCanvas.getCanvasImage() //获取图片// this.$refs.xWxmlToCanvas.saveImageToPhotosAlbum() //下载图片// }}}
</script><style>/* 请根据需求修改图表容器尺寸,如果父容器没有高度图表则会显示异常 */.charts-box {width: 100%;height: 300px;}.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}.logo {height: 200rpx;width: 200rpx;margin-top: 200rpx;margin-left: auto;margin-right: auto;margin-bottom: 50rpx;}.text-area {display: flex;justify-content: center;}.title {font-size: 36rpx;color: #8f8f94;}
</style>

完成,最终效果:点击导出图片,会生成一张本地图片

把view或者div绘制 canvas ,导出图片功能实现完整源码附效果图(兼容H5和小程序)相关推荐

  1. uni-app - 头像图片裁剪组件(支持多种裁剪,手势控制旋转或缩放、内外部控制图片移动、提供上传后端接口方案、头像图片美化)全端完美兼容 H5 App 小程序,最好用的图片上传后裁剪插件教程源代码

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,而且很难. 实现了 完美兼容 H5 App 小程序,选取手机本地相册或拍照,图片上传裁切内置多种方案,样式随便改, 本文代码干 ...

  2. uni-app - 电子签字板组件(签名专用写字画板,支持调整写字板 “横纵“ 方向,可调整线条粗细颜色等,Canvas 绘制非常丝滑流畅)完美兼容 H5 APP 小程序,最好用的画板签字教程插件源码

    前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,本文代码干净整洁注释详细. 本文实现了 全端兼容,签名专用的写字板组件,真机流畅丝滑且无 BUG, 您直接复制组件源码,按照详 ...

  3. java freemark导出word (模板、单张图片、多张图片源码)

    java freemark导出word (模板.单张图片.多张图片源码) 首先模板设置 代码编辑 设置word只读.全部 环境设置.jar包 模板设置 ** 设置模板然后另存为 这里一定要选择对xml ...

  4. android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)

    Android静态图片人脸识别的完整demo(附完整源码) 来源:互联网 作者:佚名 时间:2015-03-24 20:07 本文介绍了android静态识别人脸并进行标记人眼位置及人脸框的完整dem ...

  5. 中文汉字注音,汉字转拼音,支持图片识别文字,支持结果转图下载,附上小程序核心源码

    "文字注音"小程序在微信.字节跳动.支付宝.QQ等小程序平台同步上线,微信.头条.抖音.支付宝.QQ中搜索"文字注音"即可获得. 一.功能 汉字转拼音,支持图片 ...

  6. python实战===图片转换为字符的源码(转)

    #cmd执行命令为>>> python xx.py pic.png#-*- coding:utf-8 -*-from PIL import Image import argparse ...

  7. Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理

    Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录

  8. 大智慧365除权数据导出存通达信板块源码+工具

    大智慧8.x除权 数据读取,支持导入到通达信自定义的版块中. 通达信的除权数据是加密的,看别人有人解出来了.我搞不定,但大智慧的数据比较好读取,下载了365发现除权数据和以前已经不一样了,网上基本都没 ...

  9. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(一)查找并绘制轮廓
  2. Spring+SpringMVC+Mybatis整合
  3. Waymo向客户发邮件,宣布纯无人驾驶汽车即将上路
  4. HTTP/2笔记之连接建立
  5. 网络:窗口控制下的重发机制、流量控制
  6. 2020CCPC(威海) - Labyrinth(bfs+思维)
  7. Wordpress的theme存储位置
  8. 主管护士需要考计算机和英语吗,2020主管护师改为机考,一定要注意这些问题!...
  9. Error:collect2:ld returned 1 exit status的其他原因
  10. android 检查 write_external_storage,android – 如何知道何时需要WRITE_EXTERNAL_STORAGE
  11. C与C++关于*与的传参解析
  12. @程序员 腾讯云计算机视觉应用干货,不容错过!
  13. 福大软工1816:Alpha(5/10)
  14. java web初始化实例_Struts2中实现web应用的初始化实例详解
  15. 家庭记事本开发进度6
  16. 【转】Apache+php+mysql在windows下的安装与配置图解(最新版)
  17. matlab simulink 汽车制动纵向动力学建模
  18. 模拟电路与数字电路基础知识及实训QY-DG760A
  19. 线性布局LinearLayout(二)小练习
  20. 【win10】设置电脑固定IP,解除固定IP

热门文章

  1. MyEclipse设置默认的文档注释和背景色设置
  2. cocoaPods安装、更新第三方库
  3. PCL—低层次视觉—点云分割(基于凹凸性)
  4. SQL Server 数据库清除日志的方法
  5. valgrind——Callgrind检测程序代码的运行时间和调用过程,程序分析性能。
  6. Jquery和javascript常用技巧
  7. Linux文件,文件描述符以及dup()和dup2()
  8. 【数据库】sqlite3数据库备份、导出方法汇总
  9. Windows Ruby使用Mysql环境配置
  10. python如何控制程序的运行顺序_Python流程控制-1 顺序执行