视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js canvas实现5张图片合成一张图片
2020-11-27 21:53:44 责编:小采
文档


本文具体要实现的效果类似下面这张图片,主题流程大概是,页面上有类似这样布局的结构,点击中间那个紫色的按钮就会生成一张这样的图片,并且能够让用户下载图片的

1、首先我们布局页面的时候用的都是图片来布局成这个样子[CSS自己脑补],class为pho-bg这一段是页面开始显示的结构,几张图片定位,按钮在中间的样子。class为photo的就是用来到时候放置生成的图片。canvas就是画布。至于下面的两张图片其实就是按钮的图片和背景图,到时候一并加入画布里面【不过在页面的时候不显示】

 <div class="pho-bg">
 <img src="ossweb-img/man-1.png" class="man man-1" id="man-1" ">
 <img src="ossweb-img/man-2.png" class="man man-2" id="man-2" ">
 <img src="ossweb-img/man-3.png" class="man man-3" id="man-3" ">
 <img src="ossweb-img/man-4.png" class="man man-4" id="man-4" ">
 <a href="javascript:;" class="btn" title=""></a>
 <img src="ossweb-img/sen.png" class="sen1" id="sen1" ">
 <img id="show-pic" ">
 </div>
 <div class="photo"></div>
 <canvas id="myCanvas" width="750" height="1180"></canvas>
 <img src="ossweb-img/bg1.jpg" id="bg1" ">
 <img src="ossweb-img/btn.png" id="btn1" ">

2、重要的是js部分,这里面有几个部分

  • 在点击按钮时隐藏掉本来的页面,显示画布生成的图片
  • canvas.width,canvas.height是设置你生成的图片的大小。举个例子:如果我在canvas的html标签里面设置的width=750,height=1180,但是在js里面设置了canvas.width=500,canvas.height=500,那么生成的图片的大小就会是500*500.
  • 使用createPattern来制作图片的背景图
  • 使用drawImage()来制作组成图片的小元素也就是红、黄、蓝、绿、紫那几张图片
  • 最后用toDataURL()将画布的内容转为图片并且渲染到页面上
  • $('.btn').click(function() {
     $('.pho-bg').hide();
     // $('#myCanvas').show();
     var man1 = document.getElementById("man-1"),
     man2 = document.getElementById("man-2"),
     man3 = document.getElementById("man-3"),
     man4 = document.getElementById("man-4"),
     sen1 = document.getElementById("sen1"),
     btn1 = document.getElementById("btn1"),
     canvasBg = document.getElementById("bg1");
     
     
     var canvas = document.getElementById("myCanvas");
     ctx = canvas.getContext("2d");
     canvas.width = 750;
     canvas.height = 1180;
     // 制作背景图
     var patBg = ctx.createPattern(canvasBg, "repeat");
     ctx.rect(0, 0, 750, 1180);
     ctx.fillStyle = patBg;
     ctx.fill();
     // 将man1,man2,man3,man4,sen1,btn加入画布
     ctx.drawImage(man1, 0, 0, 341, 474);
     ctx.drawImage(man2, 410, 0, 341, 474);
     ctx.drawImage(man3, 0, 474, 341, 474);
     ctx.drawImage(man4, 410, 474, 341, 474);
     
     ctx.drawImage(sen1, 40, 950, 669, 109);
     ctx.drawImage(btn1, 150, 350, 449, 288);
     var newImg = new Image();
     newImg.src = canvas.toDataURL("image/png");
     
     $('.photo').append(newImg);
     
     });
    

    最后的结果生成的图片就是这样子的

    下载本文
    显示全文
    专题