Вы рисуете изображение на холсте, прежде чем визуализировать холст как тензор. Рисование на холсте может изменить форму исходного изображения. Например, если не указано иное - как в случае с вашим кодом - холст создается с шириной 300 пикселей и высотой 150 пикселей. Поэтому результирующая форма тензора будет более или менее похожа на следующую [150, 300, 3].
1 - Использование холста
Холст подходит для изменения размера изображения, так как можно нарисовать на холсте все или часть исходного изображения. В этом случае нужно изменить размер холста.
const canvas = document.create('canvas')
// canvas has initial width: 300px and height: 150px
canvas.width = image.width
canvas.height = image.heigth
// canvas is set to redraw the initial image
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0) // to draw the entire image
Одно слово предостережения: все вышеперечисленные фрагменты должны быть выполнены после завершения загрузки изображения с использованием обработчика событий onload
, как показано ниже
const im = new Image()
im.crossOrigin = 'anonymous'
im.src = 'url'
// document.body.appendChild(im) (optional if the image should be displayed)
im.onload = () => {
const canvas = document.create('canvas')
canvas.width = image.width
canvas.height = image.heigth
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0)
}
или используя async / await
function load(url){
return new Promise((resolve, reject) => {
const im = new Image()
im.crossOrigin = 'anonymous'
im.src = 'url'
im.onload = () => {
resolve(im)
}
})
}
// use the load function inside an async function
(async() => {
const image = await load(url)
const canvas = document.create('canvas')
canvas.width = image.width
canvas.height = image.heigth
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0)
})()
2 - Использование fromPixel непосредственно на изображении
Если размер изображения не нужно изменять, вы можете напрямую отобразить изображение как тензор, используя fromPixel
на самом изображении