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 的浏览器下有效)


目录
相关文章
|
4月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的使用方法与组件封装技巧。内容涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动操作DOM及动态创建组件实例等核心方法。同时,通过动态表单、弹窗组件和动态加载组件的封装示例,展示如何提升代码复用性和可维护性。最后,总结性能优化策略与注意事项,如批量更新DOM、懒加载大型组件及避免直接操作DOM等,帮助开发者在实际项目中灵活应用Vue动态元素管理功能。
112 15
|
3月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
4月前
|
JavaScript 前端开发 开发者
Vue 动态添加 HTML 元素组件封装使用方法及长尾关键词优化指南
本文详细介绍了Vue中动态添加HTML元素的多种方法与组件封装技巧,涵盖条件渲染(v-if/v-show)、列表渲染(v-for)、动态组件(:is)、手动DOM操作及动态创建组件实例等内容。同时提供了性能优化建议,如批量更新DOM、使用v-show代替v-if以及懒加载大型组件等。通过合理封装组件,可提高代码复用性和维护性。文中还附有具体示例代码,帮助开发者更好地理解和应用相关技术。适用于前端开发人员学习和实践Vue动态元素处理与组件设计。
124 19
|
4月前
|
缓存 JavaScript 前端开发
Vue 项目中动态添加 HTML 元素的方法与实践
本文探讨了 Vue 中动态添加 HTML 元素的多种技术方案,包括条件渲染(v-if/v-show)、动态组件(component :is)、手动挂载($mount)及 Vuex 状态管理等方法。通过实例分析,如动态表单生成器与全局模态框服务,展示了这些方案在实际开发中的应用。同时提供了性能优化建议和注意事项,帮助开发者根据需求选择最佳方式,在保持 Vue 响应式特性的同时实现灵活交互。附带代码示例,便于理解和实践。
115 2
|
3月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
7月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
197 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
8月前
|
移动开发 JavaScript 前端开发
【Html.js——图片折叠效果】折叠手风琴(蓝桥杯真题-1763)【合集】
本项目实现了一个图片折叠手风琴效果,使用jQuery完成。主要包括以下部分: - **介绍**:任务是通过点击图片实现折叠和展开的效果。 - **准备**:内置初始代码,包含 `css/style.css`、`images/` 文件夹、`js/` 文件夹及 `index.html` 等文件。启动 Web Server 服务可运行项目。 - **目标**:完善 `index.js` 文件,使页面达到预期的折叠效果。 - **规定**:严格按步骤操作,保持默认文件结构不变,并在完成后保持 Web 服务正常访问状态。 - **通关代码**:使用 jQuery 实现点击事件,为选中元素添加 `act
121 19
|
11月前
|
JavaScript 前端开发 安全
vue -- 指令 -- v-text/html/on/show/if/bind/for/model
【10月更文挑战第17天】Vue 指令是构建 Vue 应用的基础工具,掌握它们的特性和用法是成为一名优秀 Vue 开发者的重要一步。通过深入理解和熟练运用这些指令,可以打造出更加出色的前端应用。
140 50
|
10月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
153 1
利用html2canvas插件自定义生成名片信息并保存图片
|
11月前
HTML图片
【10月更文挑战第4天】HTML图片。
92 2

热门文章

最新文章