前端如何实现截图(假截图,就是生成图片并下载)

本文章我们介绍两种技术,一个是html2canvas,他可以将DOM转换为canvas,从而可以用canvas的方法获得图片,

也就是说可以使用html2canvas实现根据DOM的截图。另一个是FileSaver,他可以将图片文件(blod对象或file对象)下

载到本地。

1、html2canvas(这是个库,需要下载)

下载链接:html2canvas.js

或者使用npm installhtml2canvas下载

使用语法:html2canvas ( target, options ).then ( canvas => { 回调函数内容 } )

target:需要截图的DOM

options:配置项,下面会详细介绍

.then(canvas => {回调}):canvas表示DOM转换为canvas对象之后的canvas对象,回调里面可以针对这个canvas对象进行

各种操作,比如生成图片,比如下载图片

2、FileSaver(这个也是个库,也需要下载)

下载链接:FileSaver.js

或者使用npm install FileSaver下载

使用语法:saveAs(obj, name)

obj:需要下载的文件

name:下载文件的名字

话不多说,直接上demo:

首先引入两个库:

 <script src="./FileSaver.js"></script>

 <script src="./html2canvas.js"></script>

css代码:

<style>

 .box {

 position: relative;

 padding: 0 10px;

 box-sizing: border-box;

 width: 375px;

 height: 537px;

 background: url('http://file.40017.cn/appresource/propublic/TCdesign/bg_complate.png') no-repeat;

 background-size: 100%;

}

 img {

 width: 100%;

 margin-top: 180px;

 border-radius: 15px;

}

</style>

html代码:

 <!-- box就是我们需要截图的DOM,box的背景图连同里面img标签展示的图片都会被截下来 -->

 <div class="box">

 <img src="http://file.40017.cn/appresource/propublic/TCdesign/bg_banner_new.png">

 </div>

 <button onclick="download()">下载</button>

 <!-- 这个img标签用于展示截图后的图片 -->

 <img src="" class="show" width="375px">

js代码(看起来很多,但是多为注释,注释都是教学内容):

 <script>

 // 目标截图的DOM

 let target = document.querySelector(".box");

 // 截图展示的DOM

 let showImg = document.querySelector('.show')

 // 下载按钮的回调函数,里面的逻辑就是实现截图的过程

 function download() {

 /*

               把截图逻辑放在setTimeout里是怕点击按钮时DOM还没加载完

               因为DOM里的背景图或者img标签图片可能是使用的链接,是异步的

            */

 setTimeout(() => {

 html2canvas(target, {

 allowTaint: true, // 允许跨域图片

 useCORS: true // 开启跨域配置

}).then(canvas => {

 // canvas代表目标DOM生成的canvas对象

 /*

                        截图展示方法1:canvas.toDataURL()

                        语法:canvas.toDataURL(type, encoderOptions);

                        参数:

                            type(可选):图片格式,默认为 image/png

                            encoderOptions(可选):在指定图片格式为 image/jpeg 或 image/webp 的情况下,

                            可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

                    */

 // let imgurl = canvas.toDataURL()

 // showImg.setAttribute('src', imgurl)

 // showImg.style.width = '375px'

 /*

                        截图展示方法2:canvas.toBlob()

                        语法:canvas.toBlob(callback, type, quality)

                        参数:

                            callback:回调函数,可获得一个单独的Blob对象参数。如果图像未被成功创建,可能会获得 null 值。

                            type(可选):DOMString 类型,指定图片格式,默认格式(未指定或不支持)为 image/png。

                            quality(可选):Number 类型,值在 0 与 1 之间,当请求图片格式为 image/jpeg 或者 image/webp 时

                            用来指定图片展示质量。如果这个参数的值不在指定类型与范围之内,则使用默认值,其余参数将被忽略。

                    */

 canvas.toBlob((blob) => {

 /*

                            URL.createObjectURL()方法接收一个参数,参数类型为blob对象或file对象,可以将

                            blob对象或file对象转变为一个url

                        */

 // 获取截图的url

 let imgurl = URL.createObjectURL(blob)

 // 展示截图

 showImg.setAttribute('src', imgurl)

 showImg.style.width = '375px'

 /*

                            saveAs()方法接收两个参数,第一个是一个blob对象或file对象,第二个是下载之后下载文件的名称

                        */

 // 下载截图

 saveAs(blob, "HomeMid.png")

})

});

}, 500)

}

 </script>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容