canvas图片拼接(横向)

之前的工作中遇到的拼接图片问题,于是写了这个图片拼接。大家一起看看吧!

毫无疑问,这次我们的技术栈是H5的canvas,代码有点长。大家耐心查看(建议PC)!

HTML部分

// 样板图片

合成

// 展示合成图

javaScript部分

// 拼出来的图片的宽度

const height = 300

// 拼出来的图片的质量,0-1之间,越大质量越好

const encoderOptions = 1

const uploadInput = document.getElementById('save-img');

const imageDiv = document.getElementById('image-container');

uploadInput.addEventListener('click', event => {

const data1= new Array();

for(let i=0;i

data1[i]=$('.img_photo img').eq(i).attr('src');

}

filesToInstances(data1, instances => {

console.log(instances)

drawImages(instances, finalImageUrl => {

console.log(instances)

imageDiv.innerHTML = `

点击下载

`

})

})

})

// 根据图片文件拿到图片实例

const filesToInstances = (files, callback) => {

const length = files.length

console.log(files)

let instances = []

let finished = 0

files.forEach((file, index) => {

console.log(file)

getBase64(file).then(function(base64){

let img = base64

const image = new Image()

image.src = img

image.onload = () => {

// 图片实例化成功后存起来

instances[index] = image

finished ++

if (finished === length) {

callback(instances)

}

}

},function(err){});

// }

})

}

// 拼图

const drawImages = (images, callback) => {

console.log(images)

const canvas = document.createElement('canvas')

canvas.height = height; // canvas 拼出来之后的高度,即为图片高度

// 每张图片的宽度(这里写死了,建议动态)

const widths = images.map(item => {console.log(item); return 250; });

console.log(widths)

// canvas 拼出来之后的总宽度(横向拼接)

canvas.width = 1000;

console.log(canvas.width)

const context = canvas.getContext('2d')

let x = 0

images.forEach((item, index) => {

const width = widths[index]

context.drawImage(item, x, 0, width, height)

x += width

})

callback(canvas.toDataURL('image/jpeg', encoderOptions))

}

// 图片转base64

const getBase64 = (img) =>{

const getBase64Image = (img,width,height) => {//width、height调用时传入具体像素值,控制大小 ,不传则默认图像大小

let canvas = document.createElement("canvas");

canvas.width = width ? width : img.width;

canvas.height = height ? height : img.height;

let ctx = canvas.getContext("2d");

ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

let dataURL = canvas.toDataURL();

return dataURL;

}

let image = new Image();

image.crossOrigin = '';

image.src = img;

let deferred=$.Deferred();

if(img){

image.onload = () => {

deferred.resolve(getBase64Image(image));//将base64传给done上传处理

}

return deferred.promise();//问题要让onload完成后再return sessionStorage['imgTest']

}

}

canva怎么拼接图片_canvas图片拼接(横向)相关推荐

  1. canva怎么拼接图片_canvas 生成和合并图片

    先说背景:工作中遇到一个问题,file组件上传图片,file是可以上传n张图片:但是,后台逻辑历史原因,只能展现一张.因此:考虑到成本,决定在前端将多张图片合并成一张给后端. 先上代码 _mergeI ...

  2. canva怎么拼接图片_小间距LED显示屏怎么拼接成2K,4K和8K显示屏_小间距显示屏厂家为您科普...

    原标题:小间距LED显示屏怎么拼接成2K,4K和8K显示屏_小间距显示屏厂家为您科普 小间距显示屏拼接2K/4K/8K显示屏 (图片来源视爵光旭,版权归视爵光旭所有) 提到2K.4K和8K显示屏,人们 ...

  3. canva怎么拼接图片_搭配图片:短款外套+纱裙的冬季搭配,可爱又青春!|周二搭配...

    微信又㕛叒叕改版了~ 更新后很多小伙伴都说找不到阿束, 茫茫人海中,为防大家走失,请大家 点击上方 "服装穿衣搭配技巧大全l "  → 点击右上角"..." → ...

  4. canva怎么拼接图片_js canvas实现5张图片合成一张图片

    本文具体要实现的效果类似下面这张图片,主题流程大概是,页面上有类似这样布局的结构,点击中间那个紫色的按钮就会生成一张这样的图片,并且能够让用户下载图片的 1.首先我们布局页面的时候用的都是图片来布局成 ...

  5. android 图片拼接工具,拼接图片工具app

    截图拼接是一款非常好用的手机长图拼接工具,它的功能非常强大,支持图片拼接,无论是横向还是竖向拼接,一键设置,在这里小伙伴可以随时参与图片制作,帮助小伙伴制作出最佳的图片效果,操作也是很简单的,非常的方 ...

  6. java拼接图片大小_Java实现图片拼接(注:图片需长宽一致)

    /** * 拼接图片(注:图片需长宽一致) * @param files img1 ,img2 * @param type 1:横向拼接 2:纵向拼接 * @param targetFile 合成新的 ...

  7. java 图片拼接_Java分割拼接图片

    分割图片 private static void splitImage() throws IOException { String originalImg = "C:\\img\\split ...

  8. 使用python实现EXCEL内容批量生成图片和批量拼接图片并按照指定目录存放

    一.背景介绍 1.1 任务概况 工作中遇到一个任务,要求如下: 1.批量制作900多个图片,每张图片内容不一样,不同的部分由EXCEL的内容决定: 2.图片制作完成后,需要按照EXCEL制定的名称命名 ...

  9. 动图静图怎么拼接在一起?教你一键快速拼接图片

    静态图片和动态图片在我们的日常生活中是比较常见的两种图片类型.当我们的手中同时有静图和动图,并想要将这两种类型的图片拼接在一起的时候,应该怎么办呢?这时候,大家就可以使用拼图制作工具来拼接动图和静图, ...

  10. vue canvas拼接图片(纵向)

    vue 图片竖向拼接组件代码 底部有demo <template><div><div><inputtype="file"id=" ...

最新文章

  1. Linux中如何使用Sipcalc计算IP子网
  2. LeetCode--448
  3. 有赞融资10亿港元 腾讯领投加紧布局产业互联网
  4. How to use USB to do charger detection instead of PMIC?
  5. 利用SecureCRT上传、下载文件(使用sz与rz命令)
  6. Notepad++ 删除空白行的方法(转)
  7. 文献记录(part40)--An adversarial human pose estimation network injected with graph structure
  8. alsa 测试 linux_Electron 构建步骤 (Linux)
  9. java dao 泛型的好处_java中泛型有什么作用
  10. shell date cal
  11. XPI 文件安装方法
  12. SVM支持向量机原理总结
  13. 专业能力和表达能力,你觉得哪个更重要?
  14. LED屏幕上轮流显示三色条纹、彩虹、四叶草(数组与内存映射的采用)
  15. 机器学习(周志华) 参考答案 第十四章 概率图模型 14.9
  16. 老男孩Docker基础入门培训视频Docker核心原理解(完整版)
  17. 大数据先导实践实验二
  18. python TypeError: Object dtype dtype(‘O‘) has no native HDF5 equivalent
  19. matlab画简单长方形,matlab在图像中画长方形(框)
  20. (总)百度AI 平台API调用

热门文章

  1. 如何删除电脑计算机用户账户,怎么删除电脑账户密码 如何删除电脑开机账户密码...
  2. word如何插入和删除脚注,尾注
  3. 2018/7/18 HDU 5294 Tricks Device 最短路建图+最小割 训练日记2
  4. 01_配置yum源-银河麒麟V10(Kylin Linux Advanced Server V10 (Tercel))操作系统
  5. 电子工程师是怎样的成长之路?
  6. color a dir/s_揭发Wuli杨幂的quot;A字裙quot;执念!一款裙也要72变!
  7. CX水晶易表连接数据库的方法
  8. CC(标准)版D碟收藏指南(三)
  9. Android页面跳转(Intent)
  10. js点击第三方广告添加点击事件