Вывод изображения из сanvas показывает квадрат Малевича (чёрную картинку)

Есть функция, которая должна съесть изображение и выдать в ответ её уменьшенную версию (500 пикс), а также обрезать в квадрат; затем всё это выгрузить в хранилище и обновить страницу для применения результата. Вот код функции:

function uploadFile() {
  let image = new Image()

  image.onload = () => {
    let canv = document.createElement('canvas')
    let ctx = canv.getContext('2d')

    canv.width = 500
    canv.height = 500
    
    // cropData - насколько одна сторона больше другой (в пикселях)
    let cropData = 0
    let x = 0
    let y = 0

    // Уменьшаем изображение пропорционально
    // Затем ставим значение для x или y и cropData
    if (image.width > image.height) {
      image.height = 500
      image.width = image.width / (500 * image.height)

      cropData = image.width - image.height
      x = -(image.width - (cropData / 2))
    } else if (image.height > image.width) {
      image.width = 500
      image.width = image.height / (500 * image.width)

      cropData = image.height - image.width
      y = -(image.height - (cropData / 2))
    }

    // Рисуем
    ctx.drawImage(image, x, y, image.width, image.width, 0, 0, 500, 500)
    
    // Превращаем в Blob
    let data = canv.toBlob(blob => {
      let avatarNameDictionary = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%&_-'.split('')
      
      let name = `avatar_${DH.uid}_`
      for (let i = 0; i < 32; i++) {
        name += avatarNameDictionary[Math.floor(Math.random() * 69)]
      }
      
      // Загружаем в хранилище
      storage().ref().child(`avatars/${name}.jpg`).put(blob).then(r1 => {
        firestore().collection('profiles').where('account', '==', DH.uid).get().then(r2 => {
          r2.forEach(doc => {
            // Обновляем фото в бд
            firestore().collection('profiles').doc(doc.id).update({
              avatar: `${name}.jpg`
            }).then(r3 => {
              // Перезагружаем.
              window.location.reload()
            })
          })
        })
      })
    }, 'image/jpeg', 0.9)
  }

  image.src = filePath
}

Код работает и функция грузит изображение в формате Blob на сервер, однако на сервере оказывается не обрезанный вариант, а просто чёрное изображение. В чём может быть проблема? Логи пустые.


Ответы (0 шт):