js canvas实现5张图片合成一张图片

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

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" alt="">
   <img src="ossweb-img/man-2.png" class="man man-2" id="man-2" alt="">
   <img src="ossweb-img/man-3.png" class="man man-3" id="man-3" alt="">
   <img src="ossweb-img/man-4.png" class="man man-4" id="man-4" alt="">
   <a href="javascript:;" rel="external nofollow" class="btn" title=""></a>
   <img src="ossweb-img/sen.png" class="sen1" id="sen1" alt="">
   <img id="show-pic" alt="">
 </div>
 <div class="photo"></div>
 <canvas id="myCanvas" width="750" height="1180"></canvas>
 <img src="ossweb-img/bg1.jpg" id="bg1" alt="">
 <img src="ossweb-img/btn.png" id="btn1" alt="">

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);

  });

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript图片处理与合成总结

    引言 图片处理现在已经成为了我们生活中的刚需,想必大家也经常有这方面的需求.实际前端业务中,也经常会有很多的项目需要用到图片加工和处理.由于过去一段时间公司的业务需求,让我在这方面积累了一些干货,趁着年后这段时间总结成一系列文章与大家分享,希望能对各位努力中的前端童鞋带来启发和帮助 本系列分成以下4个部分: 基础类型图片处理技术之缩放与裁剪: 基础类型图片处理技术之图片合成: 基础类型图片处理技术之文字合成: 算法类型图片处理技术: 文章中,我会提到很多在实际实践中所遇到的坑或者经验,应该算是干

  • 使用ImageMagick进行图片缩放、合成与裁剪(js+python)

    最近的项目里面需要对书籍的封面进行处理,就是加一条阴影线形成书脊的凹凸感,然后将书脊切出,分成两部分,以便客户端实现打开动画.由于需要在服务器端处理,使用就研究使用imagemagick来进行.同时准备封装了一个Node.js和Python的方法,主要还是讲一下然后使用imagemagick来对图片进行缩放.合成后进行裁剪吧. 首先素材文件如下(左边未处理封面,右边为需要合成上去的阴影): 安装ImageMagick的过程就不讲了,可以参考官网的安装方法:http://www.imagemagi

  • js canvas实现二维码和图片合成的海报

    本文实例为大家分享了canvas二维码和图片合成海报的具体代码,供大家参考,具体内容如下 思路:在微信中登录,后台传来的是一个链接.一个名字.一张图片.把图片当做背景,画满整个画布.之后需要把链接转为二维码,使用jq.qrcode转化,转化完成后是一个canvas,把这个canvas再转成一张图片,画到大的画布上.把名字画到画布上.把整张画布转为图片. 一.定义画布和合成海报的img <style type="text/css"> #canbox { width: 100%

  • Nodejs下使用gm圆形裁剪并合成图片的示例

    说到Nodejs下的图片处理可能第一想到就是gm,gm底层可以是GraphicsMagic(其实也是gm的由来),也可以是ImageMagick(其实GraphicsMagic本身也是从ImageMagic分割而来,现在独立了).虽然这两个工具本身都不是js实现,所以需要额外安装,不过此工具非常常见,可能已经预装在linux系统下,而且安装也很方便,所以不用因为看到是"第三方"就放弃.虽然说这两个软件都只是底层,无需关心,可笔者在实践中发现必须得用GraphicsMagic,所以这里就

  • js canvas实现5张图片合成一张图片

    本文具体要实现的效果类似下面这张图片,主题流程大概是,页面上有类似这样布局的结构,点击中间那个紫色的按钮就会生成一张这样的图片,并且能够让用户下载图片的 1.首先我们布局页面的时候用的都是图片来布局成这个样子[CSS自己脑补],class为pho-bg这一段是页面开始显示的结构,几张图片定位,按钮在中间的样子.class为photo的就是用来到时候放置生成的图片.canvas就是画布.至于下面的两张图片其实就是按钮的图片和背景图,到时候一并加入画布里面[不过在页面的时候不显示] <div cla

  • js+canvas实现两张图片合并成一张图片的方法

    本文实例讲述了js+canvas实现两张图片合并成一张图片的方法.分享给大家供大家参考,具体如下: JS和canvas的合成方式 function drawAndShareImage(){ var canvas = document.createElement("canvas"); canvas.width = 700; canvas.height = 700; var context = canvas.getContext("2d"); context.rect(

  • JS移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候的想法是如果给file表单加了 multiple 属性就没有办法调用手机的摄像头拍照了,如果不加,就无法同时选择多张图片,于是我就照实跟同事说了这个情况.但回头一想,单张图片可以上传,那多张图片呢?于是就有了本文的内容. HTML5定义了 FileReader 作为文件 API 的重要成员用于读取文

  • 微信小程序实现张图片合成为一张并下载

    本文实例为大家分享了微信小程序实现张图片合成为一张并下载的具体代码,供大家参考,具体内容如下 微信小程序海报 Page({ /** * 页面的初始数据 */ data: { imgUrl: "项目中图片地址", //图片链接 img: '' // 合成后图片路径 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let that = this; wx.downloadFile({ url: '线上图片地址', success

  • php图片合成方法(多张图片合成一张)

    1.多张图片合成一张比如: 图片合成,可以显示在浏览器上面同时保存到文件夹下面 实例如下所示: <?php /** * 图片合并 **/ $pic_list = array( 'img2.png', 'img2.png', 'logo.png', 'logo.png', 'logo.png', 'img2.png', 'img2.png', 'img2.png', 'img2.png' ); $pic_list = array_slice($pic_list, 0, 9); // 只操作前9个图

  • js获取富文本中的第一张图片(正则表达式)

    js获取富文本中的第一张图片url正则公式及去除字符串里面的html标签 后台发来一个富文本字符串里面可能包含了0.1.2.3-个图片标签(img),我们的任务是获取这个字符串里面第一张图片的url,如果没有图片则返回空 var imgUrlFun = function(str){ var data = ''; str.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/, function (match, capture) {

  • Python实现多张图片合成一张马赛克图片

    目录 前言 开发环境 实现代码 先导入所需模块 读取图片文件 读取所有源图片并计算对应颜色平均值 合法图像列表 平均颜色列表 遍历 主函数 模块调用执行 完整效果 前言 最近有网友私信我,问如何把多张图片合成一张马赛克图片的样子 说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物 那我们今天就用上次爬表情包的图片来做一次马赛克图片,2万张合成一张,想想就很激动 图片素材 4K高清原图 开发环境 Python 3.6 Pycharm 实现代码 先导入所需模块

  • Python实现合成多张图片到PDF格式

    目录 1.准备 2.合成原理 3.多张照片合成PDF 在日常生活中,经常会遇到需要提交身份证正反面证明资料的情况,而且这些网站大部分只接受pdf格式,这时候我们就需要把身份证正反面两张图片合成为一个pdf文件. 在macOS系统下,预览软件可以轻松做到这一点,同时打开图片到一个预览窗口下,点击导出PDF就能成功导出.但是Windows系统就没有这么方便的软件可以实现这一点,网上有很多合成PDF的网站,但是这些网站无一例外需要上传PDF进行合成,个人认为非常地不安全. 因此,最安全的方法,还是我们

  • Python实现多张图片合成文字的效果

    目录 前言 一.图片批量下载 1.下载图片 2.检测图片数量 3.查找相似图片 二.图片马赛克 1.使用photomosaic库实现图片马赛克 2.计算颜色相似度实现图片马赛克 前言 前段时间看到有人问如何使用Python实现多张图片组成文字的效果?觉得还挺有意思,于是尝试做了一下,刚好赶上端午节,所以打算从网上下载1000张王心凌的照片,组成端午安康的字样,给大家送上祝福. 一.图片批量下载 首先我们需要从百度下载大量王心凌的图片,但是如果会去百度图片里一张张右键下载,但这样未免太麻烦了,所以

  • Android实现多张图片合成加载动画

    本文实例为大家分享了Android实现多张图片合成加载动画的具体代码,供大家参考,具体内容如下 1.自定义ProgressDialog public class MyProgressDialog extends ProgressDialog {     private int procressLoadRes;     private ImageView mImageView;     private AnimationDrawable animationDrawable;     public

随机推荐