var imageArr = [
'./image1.png',
'./image2.png',
'./image3.png',
'./image4.png',
'./image5.png',
'./image6.png'
];
drawImage(imageArr, function (data){
var imgDom = document.createElement('img');
imgDom.src = data;
document.body.appendChild(imgDom);
});
/**
* 合并图片
* @param images 图片路径数组
* @param callback
*/
function drawImage(images, callback) {
if (!images || images.length == 0) {
return false;
}
var option = {
width: 150, // 每个图片的宽
height: 150, // 每个图片的高
cols: 4, // 每行几张图片
encoderOptions: 1 // 拼出来的图片的质量,0-1之间,越大质量越好
}
var imageCount = images.length; // 图片数量
var rows = Math.ceil(imageCount / option.cols); // 行数
var canvas = document.createElement('canvas'); // 创建canvas元素
canvas.width = option.width * option.cols; // canvas宽度
canvas.height = rows * option.height; // canvas的高度
var context = canvas.getContext('2d'); // 创建渲染
// 设置背景为白色
context.fillStyle = '#fff';
context.fillRect(0, 0, canvas.width, canvas.height);
// 已绘制的图片数(onload和onerror为异步)
var drawCount = 0;
// 遍历图片路径数组
images.forEach(function (img, index) {
var imageItem = new Image();
imageItem.src = img;
// 跨域
imageItem.crossOrigin = 'Anonymous';
// 计算图片x坐标
var xAxis = parseInt(index % 4) * option.width;
// 计算图片y坐标
var yAxis = parseInt(index / 4) * option.height;
// 图片加载成功,绘制图片
imageItem.onload = function () {
context.drawImage(imageItem, xAxis, yAxis, option.width, option.height);
drawCount++;
if (drawCount === imageCount) {
// canvas返回base64数据
callback(canvas.toDataURL('image/jpeg', option.encoderOptions));
}
}
// 图片加载失败,绘制空白
imageItem.onerror = function () {
drawCount++;
if (drawCount === imageCount) {
// canvas返回base64数据
callback(canvas.toDataURL('image/jpeg', option.encoderOptions));
}
}
});
}
js+canvas实现多图合并为一张图片
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 需求说明 一张海报底图,将生成的小程序码贴在海报底图的相应位置,生成相应的图片,并且保存到相册。页面是长下面这样子...
- 样例代码来源: android-openGL-canvas OpenGL文档参考:OpenGL文档本文只对流程做排...