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 相关文章推荐
jQuery多个input求和的实现方法
Feb 12 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
Sep 05 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
Feb 16 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
Vue 使用typescript如何优雅的调用swagger API
Sep 01 Javascript
vue3+typescript实现图片懒加载插件
Oct 26 Javascript
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
海贼王:最美的悬赏令!
2020/03/02 日漫
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP中soap的用法实例
2014/10/24 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
详解vue 组件
2020/06/11 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
表彰大会主持词
2014/03/26 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
大学生见习报告范文
2014/11/03 职场文书
国庆节慰问信
2015/02/15 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫