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


Posted in Javascript onNovember 01, 2019

本文实例讲述了js+canvas实现两张图片合并成一张图片的方法。分享给大家供大家参考,具体如下:

JS和canvas的合成方式

function drawAndShareImage(){
  var canvas = document.createElement("canvas");
  canvas.width = 700;
  canvas.height = 700;
  var context = canvas.getContext("2d");
  context.rect(0 , 0 , canvas.width , canvas.height);
  context.fillStyle = "#fff";
  context.fill();
  var myImage = new Image();
  myImage.src = "./2.png";  //背景图片 你自己本地的图片或者在线图片
  myImage.crossOrigin = 'Anonymous';
  myImage.onload = function(){
    context.drawImage(myImage , 0 , 0 , 700 , 700);
    context.font = "60px Courier New";
    context.fillText("我是文字",350,450);
    var myImage2 = new Image();
    myImage2.src = "./1.png";  //你自己本地的图片或者在线图片
    myImage2.crossOrigin = 'Anonymous';
    myImage2.onload = function(){
      context.drawImage(myImage2 , 175 , 175 , 225 , 225);
      var base64 = canvas.toDataURL("image/png"); //"image/png" 这里注意一下
      var img = document.getElementById('avatar');
      // document.getElementById('avatar').src = base64;
      img.setAttribute('src' , base64);
    }
  }
}

PS:在线图片和本地图片都要注意下跨越的问题,最好放在服务器上测试。

java的实现方式

public static String generateCode(String codeUrl, Integer userId, String userName) {
 Font font = new Font("微软雅黑", Font.PLAIN, 30);// 添加字体的属性设置
 String projectUrl = PathKit.getWebRootPath() + "/before/codeImg/";
 String imgName = projectUrl + userId + ".png";
 try {
 // 加载本地图片
 String imageLocalUrl = projectUrl + "weixincode2.png";
 BufferedImage imageLocal = ImageIO.read(new File(imageLocalUrl));
 // 加载用户的二维码
 BufferedImage imageCode = ImageIO.read(new URL(codeUrl));
 // 以本地图片为模板
 Graphics2D g = imageLocal.createGraphics();
 // 在模板上添加用户二维码(地址,左边距,上边距,图片宽度,图片高度,未知)
 g.drawImage(imageCode, 575, imageLocal.getHeight() - 500, 350, 350, null);
 // 设置文本样式
 g.setFont(font);
 g.setColor(Color.BLACK);
 // 截取用户名称的最后一个字符
 String lastChar = userName.substring(userName.length() - 1);
 // 拼接新的用户名称
 String newUserName = userName.substring(0, 1) + "**" + lastChar + " 的邀请二维码";
 // 添加用户名称
 g.drawString(newUserName, 620, imageLocal.getHeight() - 530);
 // 完成模板修改
 g.dispose();
 // 获取新文件的地址
 File outputfile = new File(imgName);
 // 生成新的合成过的用户二维码并写入新图片
 ImageIO.write(imageLocal, "png", outputfile);
 } catch (Exception e) {
 e.printStackTrace();
 }
 // 返回给页面的图片地址(因为绝对路径无法访问)
 imgName = Constants.PROJECT_URL + "codeImg/" + userId + ".png";
 return imgName;
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js查找父节点的简单方法
Jun 28 Javascript
jQuery UI-Draggable 参数集合
Jan 10 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
Sep 16 Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 Javascript
教你如何在Node.js中使用jQuery
Aug 28 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
JS中自定义事件的使用与触发操作实例分析
Nov 01 #Javascript
vue设置动态请求地址的例子
Nov 01 #Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 #Javascript
js实现旋转的星空效果
Nov 01 #Javascript
浅谈小程序globalData的那些事儿
Nov 01 #Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 #Javascript
vue实现配置全局访问路径头(axios)
Nov 01 #Javascript
You might like
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
javascript中"/"运算符常见错误
2010/10/13 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
element上传组件循环引用及简单时间倒计时的实现
2018/10/01 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
Python利用ansible分发处理任务
2015/08/04 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
keras 权重保存和权重载入方式
2020/05/21 Python
python开发前景如何
2020/06/11 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
洗煤厂厂长岗位职责
2014/01/03 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
自荐信的基本格式
2014/02/22 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript