【问题标题】:issue with resizing an image on canvas在画布上调整图像大小的问题
【发布时间】:2017-11-03 16:21:07
【问题描述】:

我正在尝试在画布中导入图像,但生成的图像格式错误(画布和图像应为 300x300 像素)。 如何在这些尺寸上强制画布及其图像?

const createImage = (articleNumber, description, name, dateCreated, src) =>
      new Promise(resolve => {
        const canvas = document.createElement('canvas')
        canvas.style.width = '300px'
        canvas.style.height = '300px'
        // canvas.style.display = 'none'
        document.body.appendChild(canvas)
        const ctx = canvas.getContext('2d')

        const imgBase = new Image()
        imgBase.src = 'http://makepixelart.com/pixelpixapp/celebs/kirk.PNG'

        imgBase.onload = () => {
          ctx.drawImage(imgBase, 0, 0, 300, 300)
          ctx.fillStyle = '#000000'
          ctx.font = 'bold 50px Arial'
          ctx.fillText(articleNumber, 475, 225)
          ctx.fillText(description, 475, 380)
          ctx.fillText(name, 475, 495)
          ctx.fillText(dateCreated, 475, 610)
          const imgFigure = new Image()
          imgFigure.src = src
          imgFigure.onload = () => {
            ctx.drawImage(imgFigure, 40, 130, 390, 470)
            resolve(canvas.toDataURL())
          }
        }
      })
    createImage('xyz', 'desc', 'name item', '20170101', 'https://i.pinimg.com/736x/3e/23/92/3e2392ecff7d230cc8ae82e462f2a690--pixel-art-templates-change-background.jpg').then(base64 => {
      console.log(base64)
    })

【问题讨论】:

标签: javascript html canvas


【解决方案1】:

const createImage = (articleNumber, description, name, dateCreated, src) =>
  new Promise(resolve => {
    const canvas = document.createElement('canvas')
    canvas.width = 300;
    canvas.height = 300;
    // canvas.style.display = 'none'
    document.body.appendChild(canvas)
    const ctx = canvas.getContext('2d')

    const imgBase = new Image()
    imgBase.src = 'http://makepixelart.com/pixelpixapp/celebs/kirk.PNG'

    imgBase.onload = () => {
      ctx.drawImage(imgBase, 0, 0, 300, 300)
      ctx.fillStyle = '#000000'
      ctx.font = 'bold 50px Arial'
      ctx.fillText(articleNumber, 475, 225)
      ctx.fillText(description, 475, 380)
      ctx.fillText(name, 475, 495)
      ctx.fillText(dateCreated, 475, 610)
      const imgFigure = new Image()
      imgFigure.src = src
      imgFigure.onload = () => {
        ctx.drawImage(imgFigure, 40, 130, 390, 470)
        resolve(canvas.toDataURL())
      }
    }
  })
createImage('xyz', 'desc', 'name item', '20170101', 'https://i.pinimg.com/736x/3e/23/92/3e2392ecff7d230cc8ae82e462f2a690--pixel-art-templates-change-background.jpg').then(base64 => {
  console.log(base64)
})

使用此设置画布的宽度和高度

canvas.width = 300;
canvas.height = 300;

【讨论】:

    【解决方案2】:

    此 resolve(canvas.toDataURL()) 不起作用(跨域安全错误)。当您从画布宽度和高度设置时,不需要样式。也不需要'px':

        canvas.width = '300'
        canvas.height = '300'
    

    const createImage = (articleNumber, description, name, dateCreated, src) =>
          new Promise(resolve => {
            const canvas = document.createElement('canvas')
            canvas.width = '300'
            canvas.height = '300'
            // canvas.style.display = 'none'
            document.body.appendChild(canvas)
            const ctx = canvas.getContext('2d')
    
            const imgBase = new Image()
            imgBase.src = 'http://makepixelart.com/pixelpixapp/celebs/kirk.PNG'
    
            imgBase.onload = () => {
              ctx.drawImage(imgBase, 0, 0, 300, 300)
              ctx.fillStyle = '#000000'
              ctx.font = 'bold 50px Arial'
              ctx.fillText(articleNumber, 475, 225)
              ctx.fillText(description, 475, 380)
              ctx.fillText(name, 475, 495)
              ctx.fillText(dateCreated, 475, 610)
              const imgFigure = new Image()
              imgFigure.src = src
              imgFigure.onload = () => {
                ctx.drawImage(imgFigure, 40, 130, 390, 470)
                resolve(canvas.toDataURL())
              }
            }
          })
        createImage('xyz', 'desc', 'name item', '20170101', 'https://i.pinimg.com/736x/3e/23/92/3e2392ecff7d230cc8ae82e462f2a690--pixel-art-templates-change-background.jpg').then(base64 => {
          console.log(base64)
        })

    【讨论】:

      【解决方案3】:

      如前所述,使用以下方法设置画布大小:

      canvas.width = 300;
      canvas.height = 300;
      

      要将导入图像的大小设置为 300 x 300,请调用第二个 drawImage,如下所示:

      ctx.drawImage(imgFigure, 40, 130, 300, 300)
      

      【讨论】:

        猜你喜欢
        • 2020-10-23
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 2012-08-27
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2017-04-29
        相关资源
        最近更新 更多