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. 映射Xml文件中的数据到JavaBean中

    使用Java原生的javax.xml.bind包下的JAXBContext将一个Xml文件中的数据映射到一个JavaBean中 import java.io.File; import java.io. ...

  2. ABP 开发(一)

    rh 最近搞Angular ,使用Abp+Angular建项目,遇到部分问题,记录一下,以备查: 一.Abp官网: https://aspnetboilerplate.com/ 点Get starte ...

  3. Oracle服务

    oracle服务 参考网址:http://www.oraclejsq.com/article/010100132.html Oracle在window下安装完毕,会安装很多服务,如下图: 1.Orac ...

  4. iOS audio不支持循环播放

    解决办法:监听播放完成事件(注意点,audio标签不能设置循环播放,去除标签 loop="loop"或者 loop="false",不然不走播放完成事件) $( ...

  5. 『ACM C++』 PTA 天梯赛练习集L1 | 025-026

    满课一天,做25的时候还疯狂WA,进度可以说是很慢了 哭泣 ------------------------------------------------L1-025---------------- ...

  6. swiper在vue中正确的使用方法

    1.安装swiper,执行npm install vue-awesome-swiper --save命令 2.在main.js中添加下面三行 import 'swiper/dist/css/swipe ...

  7. 一条SQL语句的千回百转

    SQL语言相信大家都不陌生,从本质上来说,它是一种结构化查询语言,是用来数据库之间的通信的编程语言.作为一名Java程序员,我们从Java角度来看,SQL语言相当于Java接口,而数据库是实现这个接口 ...

  8. ETL项目1:大数据采集,清洗,处理:使用MapReduce进行离线数据分析完整项目

    ETL项目1:大数据采集,清洗,处理:使用MapReduce进行离线数据分析完整项目 思路分析: 1.1 log日志生成 用curl模拟请求,nginx反向代理80端口来生成日志. #! /bin/b ...

  9. 大数据:Map终结和Spill文件合并

    当Mapper没有数据输入,mapper.run中的while循环会调用context.nextKeyValue就返回false,于是便返回到runNewMapper中,在这里程序会关闭输入通道和输出 ...

  10. 使用jdk生成自签发证书(过程总结)

    前言: 最近在做华为NB-IoT接口开发,需要用到双向认证,就去学了一下. 然后我将过程总结了一下. 相关华为论坛链接:http://developer.huawei.com/ict/forum/th ...