通过canvas合成图片

效果图

页面布局部分

两个图片以及一个canvas画布

<img src="https://qnlite.gtimg.com/qqnewslite/20190924/avatar/head1.png" alt="" id="bg-img">
<img src="http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLFPJR06vhs1iccMd3hFzJ3GXAFm4VljTErIq6ejH3ZicIvfz9DqKxecXkKlUsZtDYYXOo9h0icQWZDw/0" alt="" id="avatar">
<canvas id="my-canvas" width="" height=""></canvas>

JavaScript代码部分

<script src="https://code.jquery.com/jquery-3.4.1.min.js" ></script>
<script type="text/javascript">
// 获取图片及画板对象
var border_img = document.getElementById("border-img");
var avatar = document.getElementById("avatar");
var ca = document.getElementById("my-canvas"); // 创建二维画布,并设置宽高
var ctx = ca.getContext('2d');
ca.width = 200;
ca.height = 200; // 在画布 (0, 0) 位置作为起点绘制两张图片实现合成
ctx.drawImage(avatar, 0, 0, 200, 200);
ctx.drawImage(border_img, 0, 0, 200, 200); // 得到图片的Base64编码
dataurl = ca.toDataURL();
</script>

代码合总

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>通过canvas合成图片</title>
</head>
<body>
<img crossorigin="Anonymous" src="https://qnlite.gtimg.com/qqnewslite/20190924/avatar/head1.png" alt="" id="border-img">
<img crossorigin="Anonymous" src="http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLFPJR06vhs1iccMd3hFzJ3GXAFm4VljTErIq6ejH3ZicIvfz9DqKxecXkKlUsZtDYYXOo9h0icQWZDw/0" alt="" id="avatar">
<hr>
<canvas id="my-canvas" width="" height=""></canvas>
<img src="" id="base64-img"> <script src="https://code.jquery.com/jquery-3.4.1.min.js" ></script>
<script type="text/javascript">
var border_img = document.getElementById("border-img");
var avatar = document.getElementById("avatar"); var ca = document.getElementById("my-canvas");
var ctx = ca.getContext('2d');
ca.width = 200;
ca.height = 200;
ctx.drawImage(avatar, 0, 0, 200, 200);
ctx.drawImage(border_img, 0, 0, 200, 200);
dataurl = ca.toDataURL();
$('#base64-img').attr('src', dataurl);
</script>
</body>
</html>

最新文章

  1. LoadRunner使用技巧-IP欺骗的使用
  2. sqlserver表分区
  3. Superpixel Based RGB-D Image Segmentation Using Markov Random Field——阅读笔记
  4. Linux初学 - java环境安装
  5. (传输层)UDP协议
  6. IOS中UICollectionView和UICollectionViewController的用法
  7. 【Unity Shaders】使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型
  8. Android 观察系统中短信内容的变化(内容观察者)
  9. Linux svn直接删除版本库文件
  10. 【索引】gtest学习笔记
  11. XML 文档解析操作
  12. 小哈学Python-第一课:基本介绍
  13. bat获取系统时间修改系统密码
  14. 汇编debug与masm命令
  15. 大区间素数筛选(POJ 2689)
  16. I2C总线通讯协议
  17. 【netty】(2)---搭建一个简单服务器
  18. PowerDesigner设置Oracle不区分大小写
  19. Linux 文件系统与挂载详解
  20. 使用SpringBoot的yml文件配置时踩的一个坑

热门文章

  1. grunt前端自动构建工具初级使用
  2. selenium-显式等待与隐式等待(3)
  3. alinode与node性能测试方法与分析
  4. 面试必问的Synchronized知道这些就可以了
  5. kubectl get 后按2次tab键命令补全的失效原因分析
  6. 百万年薪python之路 -- MySQL数据库之 永久修改字符串编码 与 忘了密码和修改密码
  7. lamda和匿名内部类
  8. seq2seq+attention解读
  9. 蓝桥杯基础练习 Huffuman树
  10. 2018.8.15 python 中的sorted()、filter()、map()函数