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

用js两张图片合并成一张图片的更多相关文章

  1. HTML5利用canvas,把多张图合并成一张图片

    需求分析,根据当前网页中的几张图片,在手机上长按,保存图片到相册或者发送给好友. drawCanvas(){ var self = this; var imgsrcArray = [ require( ...

  2. SQL——将两列合并成一列

    将两列合并连接成一列,需要注意的是列的格式必须是NVARCHAR或者VARCHAR类型 ), call_uuid, ) +','+agent_code '   PerDate 1 ,980408102 ...

  3. gulp打包js/css时合并成一个文件时的顺序解决

    1.可以使用插进gulp-order. 2.可以这样的写法: return gulp.src(['js/common.js','js/**/*.js']) .pipe(concat('build.js ...

  4. 将几张图片合并为一张图片,返回byte数组

    需求:通过url数组下载图片,再竖直合成一张新的图片,具体java代码如下 1 /** 2 * 竖直合并图片 3 * 4 * @param urls 5 * @return 6 */ 7 public ...

  5. spss如何把多个指标合并成一个变量?

    把多个指标合并成一个变量,通常有两种做法: 一.计算平均值 针对问卷量表数据,同时几个题表示一个维度.比如想要将“我在工作中能获得成就感”.“我可以在工作中发挥个人的才能”这两题合并成一个维度(影响因 ...

  6. java实现把两张图片合并(Graphics2D)

    package com.yin.text; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.i ...

  7. 将两个列不同的DataTable合并成一个新的DataTable

    /// <summary>         /// 将两个列不同(结构不同)的DataTable合并成一个新的DataTable         /// </summary> ...

  8. JS 两个对象数组合并并去重

    JS两个对象数组合并并去重 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

随机推荐

  1. 数字转汉字|语言代码|NSNumberFormatter

    iOS之阿拉伯数字转中文数字 - 简书 iOS中金额数字的格式化 NSNumberFormatter - 简书 ISO语言代码(ISO-639)与国家代码(ISO-3166) - CSDN博客 语种名 ...

  2. jquery toggleclass方法

    给元素更改样式,一般使用 addClass() 和removeClass() jquery官方文档 对 addClass的介绍: Adds the specified class(es) to eac ...

  3. 复习Vue

    以前学过vue,但是工作中一直没有用到都忘记了最近在复习下正好做个笔记偶尔看看,(目前常更新,2018年6月25日) 1.指令 setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. ...

  4. 树莓派3B+学习笔记:10、使用SSH连接树莓派

    SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式. 1.开启树莓派3B+的SSH远程管理功能,在终端中输入以下命令: sudo ra ...

  5. exynos4412—CMU裸板复习

    本章描述了Exynos 4412 SCP的时钟管理单元(CMUs).在Exynos 4412 SCP中,CMUs控制相位锁相环(PLLs),并为CPU.总线和单个ip的功能时钟生成系统时钟.它们还与电 ...

  6. golang基础--Interface接口

    接口是一个或多个方法签名名的集合,定义方式如下 type Interface_Name interface { method_a() string method_b() int .... } 只要某个 ...

  7. Gblocks命令行

    使用默认的设置: $ Gblocks proteins.fasta -t=p 必须是 fasta 文件在前,参数在后.若没有参数,则进入交互式界面. Gblocks cds.fasta −t=c −b ...

  8. Springboot 报找不到对应的Mapper接口或RPC接口等问题

    解决方法: 在Service引用中找到对应的Mapper引用.RPC引用: 给org.springframework.beans.factory.annotation.Autowired注解设置一个r ...

  9. 20155202 20155222 信息安全技术概论实验一 PGP的使用

    20155202 信息安全技术概论实验一 PGP的使用 实验原理 一.PGP简介 在现代社会里,电子邮件和网络上的文件传输已经成为生活的一部分.邮件的安全问题也就突出了,大家都知道在互联网上传输的数据 ...

  10. 20155206 2016-2017-2 《Java程序设计》第三周学习总结

    20155206 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 两个基本标准类:java.util.Scanner , java.math.BigDecim ...