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. java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  2. #leetcode刷题之路23-合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2- ...

  3. MySQL->AUTO_INCREMENT[20180516]

    MySQL表格中自增长主键AUTO_INCREMENT使用,实现序列的最简单的方式   创建一个AUTO_INCREMENT自增的表 mysql> create table seq_test( ...

  4. Ubuntu SSH登陆出现Access Denied错误

    在/etc/ssh/sshd_config 中有个 PermitRootLogin, 改成“PermitRootLogin yes”就可以了 重启ssh: /etc/init.d/ssh restar ...

  5. 001_02-python基础习题答案

    python 基础习题 执行 Python 脚本的两种方式 如:脚本/python/test.py 第一种方式:python /python/test.py 第二中方式:在test.py中声明:/us ...

  6. net core mysql 组件记录

    nuget 下 Pomelo.EntityFrameworkCore.MySql (据说是微软官方推荐) MySql.Data.EntityFrameworkCore (甲骨文出品) 使用方式等同于  ...

  7. python教程(零)·前言

    本教程是作者根据自己学习python的经验写下的,一来是想将经验分享给对python同样感兴趣的小白(大神请忽略),二来是想借此加深本人对python的理解,温故而知新. 学习基础 本教程面向的读者, ...

  8. (补题 杭电 1008)Elevator

    Elevator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  10. 20155207 《Java程序设计》实验报告二:Java面向对象程序设计

    实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 一.单元测试 1.三种代码 ...