需求:根据当前网页中的几张图片,在手机上长按,保存图片到相册或者发送给好友。

1. Canvas合成图片

drawCanvas(){var self = this;var imgsrcArray = [require('@/page/agent/agentexpand/img/bg.jpg'),'data:image/jpeg;base64,'+this.codeUrl];var canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');canvas.width = 750;canvas.height = 1333;var imglen = imgsrcArray.length;var drawimg = (function f(n){if(n < imglen){var img = new Image();img.crossOrigin = 'Anonymous'; //解决跨域问题img.onload = function(){//ctx.save();if(n == 0){ctx.drawImage(img,0,0,750,1333);}else{ctx.drawImage(img,466,574,210,210);}f(n+1);} img.src = imgsrcArray[n];}else{self.downloadUrl = canvas.toDataURL("image/jpeg");self.downloadUrl = self.downloadUrl.replace("data:image/jpeg;base64,", "");}})(0);
}

vue语法调用方式:<img :src="'data:image/jpeg;base64,' + downloadUrl"/>

2. Canvas合成图片

HTML5给我们提供了一个很好的图像处理神器Canvas,想要合成图片,我们首先得将图片按照一定顺序、大小和位置一张张绘制到Canvas画布中去,最后再将整个Canvas导出为图片。

// 图片合成插件
class ImgMerge {constructor(imgs = [], options){// 图片数组默认配置项let defaultImgsItem = {  url: '',   x: 0,    y: 0   };// 导出图片的格式与压缩程度默认配置项let defaultOpts = {    type: 'image/jpeg',   compress: 1    };try {imgs.forEach((item,i,arr) => {arr[i] = Object.assign({},defaultImgsItem,item)}); }catch (e) {    throw '请传入一个正确的对象数组作为参数'; }this.imgs = imgs;   // 图片数组配置项this.opts = Object.assign({},defaultOpts,options);   // 其他配置项this.imgObjs = [];   // 图片对象数组this.createCanvas();  // 创建画布return this.outputImg();  // 导出图片}// 创建画布createCanvas(){let canvas = document.createElement('canvas'),ctx = canvas.getContext('2d');let w = this.imgs[0].width,    h = this.imgs[0].height;if(!w){  throw '第一张图片宽度未设置';    }if(!h){  throw '第一张图片高度未设置';      }canvas.width = w;canvas.height = h;this.ctx = ctx;}// 绘制图片drawImg(i){let img = new Image();img.src = this.imgs[i].url;this.imgObjs.push(img);return new Promise((resolve)=>{  img.onload = resolve;  });}// 导出图片outputImg(){let imgArr = [];// 将单张图片的Promise对象存入数组this.imgs.forEach((item,i) => {  imgArr.push(this.drawImg(i));  });// 所有图片加载成功后将图片绘制于Canvas中,后将Canvas导出为图片return Promise.all(imgArr).then(()=>{this.imgs.forEach((item,i) => {let drawPara = [this.imgObjs[i], this.imgs[i].x, this.imgs[i].y];// 此处判断参数中图片是否设置了宽高,若宽高均设置,则绘制已设置的宽高,否则按照图片默认宽高绘制if(this.imgs[i].width && this.imgs[i].height){drawPara.push(this.imgs[i].width, this.imgs[i].height);}this.ctx.drawImage(...drawPara);});// 以base64格式导出图片return Promise.resolve(this.ctx.canvas.toDataURL(this.opts.type),this.opts.compress);});}
}
window.ImgMerge = ImgMerge;   //  可用于全局引用
export default ImgMerge;   //  可用于模块化引用

使用

import ImgMerge from './imgMerge.js';
window.onload = function () {let imgMerge = new ImgMerge([{  url: require('../images/bg.jpg'),  width: 640,  height: 1169   },{  url: require('../images/1.jpg'),  width: 200,   height: 200    }]);imgMerge.then(img => {let mergeImg = new Image();mergeImg.src = img;mergeImg.onload = () => {document.body.appendChild(mergeImg);};});
};

参考1111

参考2222

参考3333

canvas合并两张图片--前端相关推荐

  1. 小程序用canvas合并两张图片

    <canvas canvas-id="share" style="width:100%;height:{{screenH + 'px'}}">< ...

  2. 使用CSS3中Canvas 实现两张图片合成一张图片【常用于合成二维码图片】

    CSS3 Canvas 实现两张图片合成一张图片 需求 需求:在项目中遇到将一张固定图片和一张二维码图片合成一张新图片,并且用户能够将图片保存下载到本地. 思路:使用 CSS3 中的 Canvas 将 ...

  3. 运用canvas将两张图片画在一起,生成一张新的图片,然后实现点击下载图片

    运用canvas将两张图片img1,img2画在一起,生成一张新的图片img3,然后实现点击下载图片img3 代码如下: <!DOCTYPE html> <html lang=&qu ...

  4. uniapp怎么使用canvas把两张图片合并成一张图片

    首先,在你的 vue 组件中引入 uni-canvas: <template><view class="canvas-container"><uni- ...

  5. ios合并两张图片(叠加两张图片 重合两张图片)

    第一张图片 第二张图片 效果图 创建一个 UIImageView (黑斜体是关键一行代码)UIImageView *imgView = [[UIImageView alloc]initWithFram ...

  6. canvas 将两张图片叠加

    创建一个 canvas 元素 <canvas id="canvas"></canvas> 获取 canvas 元素 getContext() 方法可返回一个 ...

  7. uni-app使用canvas将两张图片合成一张图片

    1.HTML部分 <view class="poster" id="canvas"><img id="avatar" /& ...

  8. iOS 合并两张图片(叠加两张图片 重合两张图片)

    最近产品给了一个奇葩的需求,需要把一个活动海报和用户生成的二维码合成一张图片,分享出去,效果如下: 创建一个 UIImageView (黑斜体是关键一行代码) UIImageView *imgView ...

  9. Python实现批量合并多张图片的方法(附源码)

    前言 如何通过Python快速实现批量将多张图片进行合并(重叠)处理呢,例如如下文件夹中,有两个图层文件夹,分别为: termap:天地图底图瓦片 overlay_t:天地图标注瓦片 我们是目标是将t ...

最新文章

  1. Uber无人车撞人视频公布,究竟哪儿出问题了?
  2. python爬虫requests实战_Python_爬虫_requests小实战
  3. SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())
  4. explain 之 type
  5. 为什么调用thread.Abort(),线程不会马上停止
  6. Bailian2747 Bailian4146 数字方格【暴力】
  7. Test2 unit2+3
  8. 2020.12.23 随笔纪念粉笔数【2020】
  9. 俄罗斯方块代码 java_JAVA语言俄罗斯方块代码实现
  10. ubuntu 下的限速软件 wondershaper 以及 命令行测试网速
  11. 【小白篇】初探 Processing 色彩
  12. 815:Flooded!
  13. 生成好看的海底地形图
  14. 新手学网站建设解疑与技巧1200例
  15. 数字图像处理——图像采集和预处理
  16. excel做地图热力图_中国数据地图(热力图)-到市级-分档填色
  17. 北京发布《政务服务领域区块链应用创新蓝皮书》| 附下载
  18. 网络信息对抗基础概念
  19. C语言定义变量用什么字母,C语言中变量名有什么要求 C语言中,什么是变量和变量名?它们的区别是什么?...
  20. 【Java】方法、递归

热门文章

  1. VS之c#之奇葩问题锦集(1)------c#控件属性消失,工具箱空白
  2. Qt应用程序打包问题之错误: 发现不同 CPU 类型的模块。
  3. firefox清空缓存
  4. 1.0 Web前端:前端内容概述
  5. Structed Streaming
  6. (转)iptables设置Linux全局代理
  7. 华为huawei oj
  8. 有人把编程写成了修仙小说
  9. 关于维修考勤服务器的请示,关于进一步规范考勤制度的请示
  10. 公众号迁移公证怎么做,主体变更需要哪些资料?