vue 生成分享海报、下载图片(含生成二维码qrcodejs2的使用,网页截屏html2canvas的使用)

简介: vue 生成分享海报、下载图片(含生成二维码qrcodejs2的使用,网页截屏html2canvas的使用)


安装依赖

npm i qrcodejs2
npm i html2canvas

完整范例代码

<template>
    <div style="padding: 20px">
        <!-- 海报html元素 -->
        <div id="posterHtml" class="posterBox" :style="{backgroundImage: 'url(' + bgImgURL + ')' }">
            <div class="posterContent">
                {{contentData}}
            </div>
            <!-- 二维码 -->
            <div class="qrcodeBox">
                <div id="qrcodeImg"></div>
            </div>
        </div>
        <div>
            <button class="myButton"  @click="createPoster">生成海报</button>
            <button class="myButton"  @click="downloadPoster(posterImgURL,'海报名称')">下载海报</button>
        </div>
        <!--微信里,可长按保存或转发-->
        <img v-if="posterImgURL" class="posterBox" :src="posterImgURL" >
    </div>
</template>
<script>
    import bgImgURL from "@/assets/images/bg2.jpg"
    import QRCode from 'qrcodejs2'
    import html2canvas from 'html2canvas'
 
    export default {
        data() {
            return {
                bgImgURL: bgImgURL,
                contentData: '我是一张分享海报', // 文案内容
                posterImgURL: '', // 最终生成的海报图片URL
            }
        },
        mounted() {
            this.$nextTick(
                () => {
                    this.createQrcode("https://www.baidu.com/")
                }
            )
        },
        methods: {
            // 生成二维码
            createQrcode(text) {
                let qrcodeImgEl = document.getElementById('qrcodeImg')
                qrcodeImgEl.innerHTML = ''
                let qrcode = new QRCode(qrcodeImgEl, {
                    width: 100,
                    height: 100,
                    colorDark: '#000000',
                    colorLight: '#ffffff',
                    correctLevel: QRCode.CorrectLevel.H
                })
                qrcode.makeCode(text)
            },
            // 生成海报
            createPoster() {
                let that = this
                let posterDOM = document.getElementById('posterHtml')
                html2canvas(posterDOM, {
                    width: posterDOM.offsetWidth,
                    height: posterDOM.offsetHeight,
                    //按比例增加分辨率
                    scale: window.devicePixelRatio, // 设备像素比
                    useCORS: true,//(图片跨域相关)
                    allowTaint: true,//允许跨域(图片跨域相关)
                    logging: false,
                    letterRendering: true,
                }).then(function (canvas) {
                    that.posterImgURL = canvas.toDataURL('image/png')
                })
            },
            // 下载海报
            downloadPoster(url, fileName) {
                let a = document.createElement('a')
                a.download = fileName
                a.href = url
                a.dispatchEvent(new MouseEvent('click'))
            },
        }
    }
</script>
<style scoped>
    /*海报*/
    .posterBox {
        position: relative;
        width: 800px;
        height: 300px;
        background-repeat: no-repeat;
        background-size: cover;
    }
 
    /*海报文案*/
    .posterContent {
        text-align: center;
        color: white;
        padding: 10px;
    }
 
    /*二维码*/
    .qrcodeBox {
        position: absolute;
        bottom: 10px;
        right: 10px;
    }
 
    /*按钮*/
    .myButton {
        background: none;
        cursor: pointer;
        padding: 5px 10px;
        border-radius: 4px;
        margin: 10px;
    }
</style>

注意事项

  • 若第三方的服务端限制了跨域,则引入的网络图片无法截图
  • 若是自己的服务端,则图片要是cdn上的地址,并且允许图片跨域,header头中设置应为
Access-Control-Allow-Origin:  *

网页截屏html2canvas的使用

            // 生成海报
            createPoster() {
                let that = this
                let posterDOM = document.getElementById('posterHtml')
                html2canvas(posterDOM, {
                    width: posterDOM.offsetWidth,
                    height: posterDOM.offsetHeight,
                    //按比例增加分辨率
                    scale: window.devicePixelRatio, // 设备像素比
                    useCORS: true,//图片跨域相关
                    allowTaint: true,//允许跨域(图片跨域相关)
                    logging: false,
                    letterRendering: true,
                }).then(function (canvas) {
                    that.posterImgURL = canvas.toDataURL('image/png')
                })
            },

参数

生成二维码qrcodejs2的使用

text  为扫码二维码显示的内容(若是网址,则会直接打开网页)

// 生成二维码
createQrcode(text) {
    let qrcodeDOM = document.getElementById('qrcodeImg')
    qrcodeDOM.innerHTML = ''
    let qrcode = new QRCode(qrcodeDOM, {
        width: 100,
        height: 100,
        colorDark: '#000000',
        colorLight: '#ffffff',
        correctLevel: QRCode.CorrectLevel.H
    })
    qrcode.makeCode(text)
},

参数

名称 默认值 说明
width 256 图像宽度
height 256 图像高度
typeNumber 4  
colorDark "#000000" 前景色
colorLight "#ffffff" 背景色
orrectLevel QRCode.CorrectLevel.L 容错级别,可设置为:

QRCode.CorrectLevel.L

QRCode.CorrectLevel.M

QRCode.CorrectLevel.Q

QRCode.CorrectLevel.H

方法

名称 说明
makeCode(text) 设置二维码内容
clear() 清除二维码。(仅在不支持 Canvas 的浏览器下有效)


目录
相关文章
|
2月前
|
JavaScript 前端开发 安全
vue -- 指令 -- v-text/html/on/show/if/bind/for/model
【10月更文挑战第17天】Vue 指令是构建 Vue 应用的基础工具,掌握它们的特性和用法是成为一名优秀 Vue 开发者的重要一步。通过深入理解和熟练运用这些指令,可以打造出更加出色的前端应用。
80 50
|
1月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
38 1
利用html2canvas插件自定义生成名片信息并保存图片
|
5月前
|
移动开发 前端开发 JavaScript
基于 HTML5 和 Canvas 开发的在线图片编辑器
基于 HTML5 和 Canvas 开发的在线图片编辑器
112 0
|
2月前
HTML图片
【10月更文挑战第4天】HTML图片。
32 2
|
3月前
|
前端开发
Twaver-HTML5基础学习(37)network导出图片并下载
本文介绍了如何在Twaver-HTML5中将network导出为图片并提供下载,主要通过将network转换为canvas对象,然后转换为base64编码的图片进行展示和下载。
43 5
|
2月前
|
JavaScript 前端开发 容器
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
Vue生成PDF文件攻略:html2canvas与jspdf联手,中文乱码与自动换行难题攻克
220 0
|
3月前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
108 0
react字符串转为dom标签,类似于Vue中的v-html
|
3月前
|
前端开发 Windows
【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
60 13
|
3月前
|
移动开发 前端开发 JavaScript
使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)
本文介绍了在前端项目中,当使用`html2canvas`遇到问题时,如何使用`html-to-image`库作为替代方案,结合`jspdf`实现将DOM元素生成为PDF文件并提供下载。文章首先讨论了`html2canvas`可能遇到的问题,并提供了该库的使用示例代码。随后,详细介绍了`html-to-image`库的安装和使用方法,展示了如何将DOM元素转换为Canvas,再利用`jspdf`生成PDF文件。最后,文章通过示例代码说明了整个转换和下载的过程,并展示了效果截图。
163 0
|
4月前
在线将多张图片拼接起来图工具HTML源码
在线将多张图片拼接成一张图片,多图合一并导出下载。无需本地安装软件。 下载时,使用日期时间作为文件名,规避图片文件名相同造成的覆盖问题;也能省去一部覆盖确认操作 多语言支持
49 0
在线将多张图片拼接起来图工具HTML源码