将页面保存成图片并长按保存图片html2canvas+mui

4 篇文章 0 订阅

参考 :

1.JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

2.js将canvas保存成图片并下载

3.使用mui实现长按保存图片_Ctrl30-CSDN博客

我做的一个需要生成二维码 并长按保存图片的页面,用了mui+html2canvas+qrcode

qrcode.js生成二维码插件

测试时发现微信和手机浏览器都有自己的长按图片保存功能,所以说不需要使用别的了

新的html

		<div class="mui-content">
			<div class="mui-content-padded" id="boxWrap"  style="margin: 5px;" >
				<div class="XyPic" id="capture">
					<img src="/images/校友证书.jpg" style="width: 100%;"  />
					<div id="name"><?=$name ?></div>
					<div id="bianhao">SJZXY<span style="color: red;"><?=$id ?></span></div>					
					<div id="qrcode"></div>
					<div id="baoc">
						长按保存图片<br/>分享到朋友圈
					</div>	
					<div id="canvasWrap">
						
					</div>									
				</div>

			</div>
			


		</div>

css

		<style>
			.XyPic{
				width: 7.3rem;
				height: 10.94rem;
				position: relative;
				z-index: 9;
			}
			#name{
				font-size: 36px;
				font-weight: 400;
				color: black;
				position: absolute;
				top: 3.58rem;
				left:2.8rem;
			}
			#bianhao{
				font-size: 18px;
				font-weight: 400;				
				position: absolute;
				bottom: 2rem;
				left:5rem;				
			}
			#qrcode{
/* 				width: 2.5rem;
				height: 2.5rem; */
				position: absolute;
				bottom: 2.4rem;
				left:1rem;					
			}
			#baoc{
				font-size: 11px;				
				color:#365C84 ;
				position: absolute;
				bottom: 1.7rem;
				left:1.2rem;					
			}
			#canvasWrap{
				position: absolute;
				top: 0;
				z-index: 99;
			}
		</style>

js

		<script src="../js/mui.min.js"></script>
		<script src="../js/qrcode.js"></script>
		<script type="text/javascript" src="../js/html2canvas.js"></script>
		<script>
			document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';
			mui.init( { gestureConfig:{
						tap: true, //默认为true
						doubletap: true, //默认为false
						longtap: true, //默认为false
						swipe: true, //默认为true
						drag: true, //默认为true
						hold:true,//默认为false,不监听
						release:false//默认为false,不监听
					}});

			window.onload =function(){
				// 生成二维码
				var qrcode = new QRCode(document.getElementById("qrcode"), {
					width : 100,//设置宽高
					height : 100
				});
				qrcode.makeCode("http://www.xiaoyou.sjzlg.com:7070");

				html2canvas(document.querySelector("#capture")).then(canvas => {
					var img = document.createElement("img");
					img.src = canvas.toDataURL("image/png"); // 将canvas转换成img的src流
					img.style.cssText = "width: 100%;"
					document.querySelector("#canvasWrap").appendChild(img);				 
				  
				});
				
			   
	    	}
	    </script>
			




下面时旧的

html部分

		<div class="mui-content">
			<div class="mui-content-padded" style="margin: 5px;" >
				<div class="XyPic" id="capture">
					<img src="/images/校友证书.jpg" style="width: 100%;"  />
					<div id="name">于志强</div>
					<div id="bianhao">SJZXY<span style="color: red;">0001</span></div>					
					<div id="qrcode"></div>
					<div id="baoc">
						长按保存图片<br/>分享到朋友圈
					</div>					
				</div>
				
			</div>

js部分

		<script src="../js/mui.min.js"></script>
		<script src="../js/qrcode.js"></script>
		<script type="text/javascript" src="../js/html2canvas.js"></script>
		<script>
			document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';
			mui.init( { gestureConfig:{
						tap: true, //默认为true
						doubletap: true, //默认为false
						longtap: true, //默认为false
						swipe: true, //默认为true
						drag: true, //默认为true
						hold:true,//默认为false,不监听
						release:false//默认为false,不监听
					}});

			window.onload =function(){
				// 生成二维码
				var qrcode = new QRCode(document.getElementById("qrcode"), {
					width : 100,//设置宽高
					height : 100
				});
				qrcode.makeCode("http://www.baidu.com");
			   
			}
			


		document.addEventListener("longtap", function(event) { 
			var name = event.target.tagName; 
			if(name === "IMG") { 
				html2canvas(document.querySelector("#capture")).then(canvas => {
					downLoad(saveAsJPG(canvas));
				  // document.body.appendChild(canvas)
				});
				
			} 
		}); 

		function saveAsJPG(canvas) {
			return canvas.toDataURL("image/jpeg");
		};	

		function downLoad(url){
			var oA = document.createElement("a");
			oA.download = '校友证';// 设置下载的文件名,默认是'下载'
			oA.href = url;
			document.body.appendChild(oA);
			oA.click();
			oA.remove(); // 下载之后把创建的元素删除
		};	  
			  

  		  
		</script>

一:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

    有时我们需要实现在浏览器端直接对整个或部分页面进行截屏,比如移动端常见的“长按网页保存为图片”功能。这个借助 html2canvas 这个第三方 js 库即可实现,下面通过样例演示其如何使用。

一、基本介绍

1,什么是 html2canvas

  • html2canvas 可以通过获取 HTML 的某个元素,然后生成 Canvas,从而让用户保存为图片。
  • html2canvas 工作原理是将当页面渲染成一个 Canvas 图片,通过读取 DOM 并将不同的样式应用到这些元素上。
  • html2canvas 不需要来自服务器任何渲染,整张图片都是在客户端浏览器创建。

2,适用的浏览器

只要浏览器支持 Canvas 即可,包括:Firefox 3.5+、Google Chrome、Opera 新的版本、IE9 以上的浏览器。

3,注意事项

当然并不是所有的页面元素都可以进行转换的,下面是不支持的情况:

  • 不支持 iframe
  • 不支持跨域图片(可以先将线上图片转换成 base64,然后用 base64 作为图片路径)
  • 不支持 flash
  • 不支持 transform、transition 过渡、animation 动画(备注:transform 初始布局是可以的,但是不能参与动画类的操作)

4,安装配置

(1)首先到官网将 html2canvas.js 下载到本地。

(2)然后在页面中将其引用即可。

1

<script type="text/javascript" src="js/html2canvas.js"></script>

二、基本用法

1,将整个页面转成 Canvas

(1)效果图

  • 点击“开始生成”按钮后,会将整个页面渲染成一个 canvas,并将这个 canvas 添加到页面尾部。
  • 右键点击生成的 canvas,可以将其作为图片保存到本地。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

(2)样例代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title>hangge.com</title>

  </head>

  <body style="margin:0px">

    <div id="capture" style="padding: 10px; background: #f5da55; width: 200px;">

      <h4 style="color: #000; ">欢迎访问 hangge.com</h4>

    </div>

    <button type="button" name="button" onclick="convert()">开始生成</button>

    <br>

    <script type="text/javascript" src="js/html2canvas.js"></script>

    <script type="text/javascript">

      //开始转换

      function convert() {

        html2canvas(document.body).then(canvas => {

          document.body.appendChild(canvas)

        });

      }

    </script>

  </body>

</html>

2,将指定 DOM 元素转成 Canvas

下面样例只将按钮上方的 div 渲染成 Canvas。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

html2canvas(document.querySelector("#capture")).then(canvas => {

  document.body.appendChild(canvas)

});

3,将 Canvas 转换成 base64 形式

(1)上面样例生成 canvas 后,便直接显示在页面上进行预览。我们也可以将生成的 canvas 转成 base64 形式用于提交到后台,或者作为 <image> 元素的 src 属性来显示。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

4

html2canvas(document.querySelector("#capture")).then(canvas => {

  var imgUrl = canvas.toDataURL("image/png"); // 将canvas转换成img的src流

  console.log("base64编码数据:", imgUrl);

});


(2)转换时可以设置截图质量(0~1)

1

2

3

4

html2canvas(document.querySelector("#capture")).then(canvas => {

  var imgUrl = canvas.toDataURL("image/png", 1); // 此方法可以设置截图质量(0-1)

  console.log("base64编码数据:", imgUrl);

});

三、进阶用法

1,设置生成的 Canvas 的高度和宽度

html2canvas 在使用时还有许多可选的配置参数,下面样例生成一个 75*75 的 canvas。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

4

5

6

html2canvas(document.querySelector("#capture"),{

  width: 75,

  height: 75

}).then(canvas => {

  document.body.appendChild(canvas)

});

2,设置 Canvas 的背景色

(1)使用 backgroundColor 这个属性可以设置 canvas 的背景色:

  • 默认值为白色(#ffffff)
  • 如果想要背景透明,可以将其设为 null

(2)下面将背景色改成绿色

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

4

5

6

7

html2canvas(document.querySelector("#capture"),{

  width: 240,

  height: 120,

  backgroundColor: "#00ff00"

}).then(canvas => {

  document.body.appendChild(canvas)

});

3,设置放大倍数

(1)使用 scale 属性可以修改渲染时的放大倍数(默认为 1),将其调大可以解决低分辨率设备下生成的图片模糊问题。

(2)下面是当 scale 设置为2时,生成的图片。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

4

5

html2canvas(document.querySelector("#capture"),{

  scale: 2

}).then(canvas => {

  document.body.appendChild(canvas)

});

4,指定渲染的 Canvas

如果页面上原先就有个 canvas 元素,我们希望可以将图片绘制在它上面,可以使用 canvas 属性设置。

原文:JS - 使用 html2canvas 将页面保存成图片(或对指定元素截图)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title>hangge.com</title>

  </head>

  <body style="margin:0px">

    <div id="capture" style="padding: 10px; background: #f5da55; width: 200px;">

      <h4 style="color: #000; ">欢迎访问 hangge.com</h4>

    </div>

    <button type="button" name="button" onclick="convert()">开始生成</button>

    <br>

    <canvas id="myCanvas" width="220" height="84"></canvas>

    <script type="text/javascript" src="js/html2canvas.js"></script>

    <script type="text/javascript">

      //开始转换

      function convert() {

        html2canvas(document.querySelector("#capture"),{

          canvas: document.querySelector("#myCanvas")

        }).then(canvas => {

        });

      }

    </script>

  </body>

</html>


 




web得胜

js将canvas保存成图片并下载

1

2

3

4

<canvas id="canvas" width="400" height="400"></canvas>

<div>

    <button id="save">保存</button>

</div>

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

var arr = [

    {locations:[[0,0],[200,200],[0,400]],color:"red"},

    {locations:[[0,0],[400,0],[200,200]],color:"orange"},

    {locations:[[0,400],[100,300],[200,400]],color:"yellow"},

    {locations:[[100,300],[200,200],[300,300],[200,400]],color:"green"},

    {locations:[[300,100],[200,200],[300,300]],color:"blue"},

    {locations:[[300,100],[400,0],[400,200],[300,300]],color:"indigo"},

    {locations:[[200,400],[400,400],[400,200]],color:"purple"}

];

var oCanvas = document.getElementById("canvas");

var ctx = oCanvas.getContext("2d");

for(let i=0;i<arr.length;i++){

    draw(arr[i],ctx);

}

function draw(item,ctx){

    ctx.beginPath();

    ctx.moveTo(item.locations[0][0],item.locations[0][1]);

    for(let i = 0;i<item.locations.length;i++){

        let x = item.locations[i][0];

        let y = item.locations[i][1];

        ctx.lineTo(x,y);

        console.log(1234567)

    }

    ctx.closePath();

     

    ctx.fillStyle = item.color;

    ctx.fill();

     

    ctx.strokeStyle = "#000";

    ctx.lineWidth = 2;

    ctx.stroke();

}

var imgId = document.getElementById("imgId");

document.getElementById("save").onclick = function (){

    downLoad(saveAsPNG(canvas));

}

// 保存成png格式的图片

function saveAsPNG(canvas) {

    return canvas.toDataURL("image/png");

}

// 保存成jpg格式的图片

function saveAsJPG(canvas) {

    return canvas.toDataURL("image/jpeg");

}

// 保存成bmp格式的图片  目前浏览器支持性不好

function saveAsBMP(canvas) {

    return canvas.toDataURL("image/bmp");

}

/**

 * @author web得胜

 * @param {String} url 需要下载的文件地址

 * */

function downLoad(url){

    var oA = document.createElement("a");

    oA.download = '';// 设置下载的文件名,默认是'下载'

    oA.href = url;

    document.body.appendChild(oA);

    oA.click();

    oA.remove(); // 下载之后把创建的元素删除

}

 文中图片是个七巧板,如下:

 

  




首先初始化mui(longtap是我们要用到的,longtap默认为false,如果没有初始化为true,则长按事件无效)

 mui.init( { gestureConfig:{
            tap: true, //默认为true
            doubletap: true, //默认为false
            longtap: true, //默认为false
            swipe: true, //默认为true
            drag: true, //默认为true
            hold:true,//默认为false,不监听
            release:false//默认为false,不监听
        }});
//给需要长按保存图片的img标签设置 class='saveImg'
 var divs = document.getElementsByClassName('saveImg');
    for(var i = 0;i<divs.length;i++){
      divs[i].addEventListener('longtap', function () {
        //开启弹框
          mui('#picture').popover('toggle');
          var imgurl = this.src;
          document.getElementById('saveImg').addEventListener('tap', function () {
            var imgDtask = plus.downloader.createDownload(imgurl,{method:'GET'}, function (d,status) {
                    if(status == 200){
                        plus.gallery.save(d.filename, function () {//保存到相册
                            plus.io.resolveLocalFileSystemURL(d.filename, function (enpty) {
                            // 关闭弹框
                                mui('#picture').popover('toggle');
                                mui.toast('保存成功')
                            });
 
                        })
                    }else{
                        mui.toast('保存失败')
                    }
              });
            imgDtask.start();
          });
   
      })
    }
<-- 弹框的html-->
<div id="picture" class="mui-popover mui-popover-action mui-popover-bottom" style="z-index: 99999999">
            <ul class="mui-table-view">
                <li class="mui-table-view-cell">
                    <a href="javascript:;" id="saveImg">保存图片</a>
                </li>
            </ul>
            <ul class="mui-table-view">
                <li class="mui-table-view-cell">
                    <a href="#picture"><b>取消</b></a>
                </li>
            </ul>
        </div>
ps:要引入mui的js和css
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值