js uses Canvas to merge multiple pictures into one implementation code

js uses Canvas to merge multiple pictures into one implementation code

Solution

function mergeImgs(list) {
 const imgDom = document.createElement('img')
 document.body.appendChild(imgDom)

 const canvas = document.createElement('canvas')
 canvas.width = 500
 canvas.height = 500 * list.length
 const context = canvas.getContext('2d')

 list.map((item, index) => {
 const img = new Image()
 img.src = item
 // Cross-domain img.crossOrigin = 'Anonymous'
 
 img.onload = () => {
  context.drawImage(img, 0, 500 * index, 500, 500)
  const base64 = canvas.toDataURL('image/png')
  imgDom.setAttribute('src', base64)
  // console.log(baseList)
 }
 })
}

const urlList = ['./img/timg%20(1).jpg', './img/timg.jpg']
mergeImgs(urlList )

Optimize the code slightly and change it to a public method

/**
 * Merge multiple images and return a new image * @param {Array} list Image url array * @param {Number} cwith Canvas width defaults to 500
 * @param {Number} cheight The default height of the canvas is 500
 */
function mergeImgs(list, cwith = 500, cheight = 500) {
 return new Promise((resolve, reject) => {
 const baseList = []

 const canvas = document.createElement('canvas')
 canvas.width = cwith
 canvas.height = cheight * list.length
 const context = canvas.getContext('2d')

 list.map((item, index) => {
  const img = new Image()
  img.src = item
  // Cross-domain img.crossOrigin = 'Anonymous'

  img.onload = () => {
  context.drawImage(img, 0, cheight * index, cwith, cheight)
  const base64 = canvas.toDataURL('image/png')
  baseList.push(base64)

  if (baseList[list.length - 1]) {
   console.log(baseList)
   // Return the new image resolve(baseList[list.length - 1])
  }
  }
 })
 })
}

const urlList = ['./img/timg%20(1).jpg', './img/timg.jpg']
mergeImgs(urlList ).then(base64 => {
	const imgDom = document.createElement('img')
	imgDom.src = base64
	document.body.appendChild(imgDom)
})

Effect

insert image description here

This is the end of this article about the implementation code of js using Canvas to merge multiple images into one. For more relevant js canvas image merging content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • js+canvas realizes the method of merging two pictures into one picture
  • js saves the image generated by canvas, or directly saves an image
  • js implements canvas method to save pictures in png format and download them locally
  • JS mobile/H5 select multiple images to upload at the same time and use canvas to compress the images
  • How to draw pictures on canvas using js+html5

<<:  How to quickly install and deploy MySQL in Windows system (green free installation version)

>>:  Basic knowledge of load balancing and a simple example of load balancing using nginx

Recommend

How to handle the tcp_mark_head_lost error reported by the Linux system

Problem Description Recently, a host reported the...

Detailed explanation of log processing of Docker containers

Docker has many log plug-ins. The default is to u...

Sharing experience on MySQL slave maintenance

Preface: MySQL master-slave architecture should b...

my.cnf parameter configuration to optimize InnoDB engine performance

I have read countless my.cnf configurations on th...

How to reduce image size using Docker multi-stage build

This article describes how to use Docker's mu...

Summary of uncommon js operation operators

Table of contents 2. Comma operator 3. JavaScript...

Axios secondary encapsulation example Demo in the project

1. Why do packaging? Facilitates overall code cal...

HTML+CSS3 code to realize the animation effect of the solar system planets

Make an animation of the eight planets in the sol...

Detailed description of the function of meta name="" content="

1. Grammar: <meta name="name" content...

Solve the pitfall of storing boolean type values ​​in localstorage

LocalStorage stores Boolean values Today, when I ...

How to run Linux commands in the background

Normally, when you run a command in the terminal,...

MySQL Innodb key features insert buffer

Table of contents What is insert buffer? What are...

Vue sample code for online preview of office files

I'm working on electronic archives recently, ...

Six ways to increase your website speed

1. Replace your .js library file address with the...