JavaScript Canvas 合成多张图片并实现下载
本文介绍如何使用 HTML5 Canvas 将多张独立图片合成一张完整图像。通过获取页面元素、设置画布尺寸、利用 drawImage 和 createPattern 绘制背景与前景,最终通过 toDataURL 导出图片并支持用户下载。
Canvas 图片合成效果概述
本文旨在实现一种图片合成效果,如参考图所示。核心流程为:页面初始展示特定布局结构,当用户点击页面中间的紫色按钮时,系统自动生成一张合成图片,并提供下载功能供用户保存。

页面布局与元素准备
页面布局阶段,主要使用图片进行排版。初始显示的区域由 class 为 pho-bg 的元素构成,其中包含多张定位好的图片以及位于中间的按钮。class 为 photo 的区域用于后续展示生成的合成图。id 为 myCanvas 的元素即为绘图画布。此外,页面底部还有两张图片(按钮背景图等),它们在初始状态下不可见,但在生成图片时会被加入画布处理。
<div class="pho-bg">
<img src="ossweb-img/man-1.png" class="man man-1" id="man-1" alt="">
<img src="ossweb-img/man-2.png" class="man man-2" id="man-2" alt="">
<img src="ossweb-img/man-3.png" class="man man-3" id="man-3" alt="">
<img src="ossweb-img/man-4.png" class="man man-4" id="man-4" alt="">
<a href="javascript:;" class="btn" title=""></a>
<img src="ossweb-img/sen.png" class="sen1" id="sen1" alt="">
<img id="show-pic" alt="">
</div>
<div class="photo"></div>
<canvas id="myCanvas" width="750" height="1180"></canvas>
<img src="ossweb-img/bg1.jpg" id="bg1" alt="">
<img src="ossweb-img/btn.png" id="btn1" alt="">
JavaScript 核心实现逻辑
核心逻辑集中在 JavaScript 代码中,主要包含以下几个关键步骤:
- 交互触发时,首先隐藏原有的页面布局,随后显示由 Canvas 生成的合成图片。
- 通过设置 canvas.width 和 canvas.height 属性来定义生成图片的尺寸。例如,若 HTML 标签中设置的宽高为 width=750 和 height=1180,但在 JS 代码中重新赋值为 canvas.width=500 和 canvas.height=500,则最终生成的图片尺寸将遵循 JS 中设置的 500*500 像素。
- 利用 createPattern 方法创建图片背景,用于绘制合成图的底色或背景图案。
- 使用 drawImage() 方法将红、黄、蓝、绿、紫等小元素图片绘制到画布上,构成合成图的主要视觉内容。
- 最后,调用 toDataURL() 方法将 Canvas 的内容转换为 Data URL 格式的字符串,并将其渲染为图片元素展示在页面上。
$('.btn').click(function() {
$('.pho-bg').hide();
// $('#myCanvas').show();
var man1 = document.getElementById("man-1"),
man2 = document.getElementById("man-2"),
man3 = document.getElementById("man-3"),
man4 = document.getElementById("man-4"),
sen1 = document.getElementById("sen1"),
btn1 = document.getElementById("btn1"),
canvasBg = document.getElementById("bg1");
var canvas = document.getElementById("myCanvas");
ctx = canvas.getContext("2d");
canvas.width = 750;
canvas.height = 1180;
// 制作背景图
var patBg = ctx.createPattern(canvasBg, "repeat");
ctx.rect(0, 0, 750, 1180);
ctx.fillStyle = patBg;
ctx.fill();
// 将man1,man2,man3,man4,sen1,btn加入画布
ctx.drawImage(man1, 0, 0, 341, 474);
ctx.drawImage(man2, 410, 0, 341, 474);
ctx.drawImage(man3, 0, 474, 341, 474);
ctx.drawImage(man4, 410, 474, 341, 474);
ctx.drawImage(sen1, 40, 950, 669, 109);
ctx.drawImage(btn1, 150, 350, 449, 288);
var newImg = new Image();
newImg.src = canvas.toDataURL("image/png");
$('.photo').append(newImg);
});
生成结果与总结
经过上述步骤处理后,生成的最终图片效果如参考图所示。

以上内容涵盖了利用 Canvas 进行图片合成的基本流程,希望对读者有所帮助,欢迎继续支持本站。
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
