У меня есть следующий код, который позволяет пользователю загружать изображение, которое помещается на холст, но как только оно было нарисовано, я хочу, чтобы пользователи могли поворачивать изображение одним нажатием кнопки, но я неНе знаю, как повторно получить доступ к объекту изображения, чтобы иметь возможность вращать холст.Приведенный ниже код работает следующим образом:
onFilePicked (e) {
const files = e.target.files;
for (let file of files) {
if(file !== undefined) {
let image = {
thumbnail: '/img/spinner.gif'
};
this.images.push(image);
this.loadImage(file, image);
}
}
},
loadImage(file, image) {
const fr = new FileReader();
fr.readAsDataURL(file);
fr.addEventListener('load', () => {
var img = new Image();
img.src = fr.result;
img.onload = () => {
image.thumbnail = this.resizeImage(img, 400, 300);
image.large = this.resizeImage(img, 1280, 960);
}
})
},
resizeImage(origImg, maxWidth, maxHeight) {
let scale = 1;
if (origImg.width > maxWidth) {
scale = maxWidth / origImg.width;
}
if (origImg.height > maxHeight) {
let scale2 = maxHeight / origImg.height;
if (scale2 < scale) scale = scale2;
}
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
canvas.width = origImg.width * scale;
canvas.height= origImg.height * scale;
ctx.drawImage(origImg, 0, 0, canvas.width, canvas.height);
return canvas.toDataURL("image/jpeg");
},
И ниже показана функция, которую я построил для поворота изображения, - она работает в том случае, если я заменю код внутри функции resizeImage на код ниже, чтоизображение нарисовано так, что оно вращается правильно, но я не знаю, как получить доступ к объекту origImg, чтобы можно было перерисовать холст в отдельной функции.
rotateImage(origImg, maxWidth, maxHeight){
let scale = 1;
if (origImg.width > maxWidth) {
scale = maxWidth / origImg.width;
}
if (origImg.height > maxHeight) {
let scale2 = maxHeight / origImg.height;
if (scale2 < scale) scale = scale2;
}
let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
canvas.width = origImg.height * scale;
canvas.height= origImg.width * scale;
ctx.translate(canvas.width, 0);
ctx.rotate(90 * Math.PI / 180);
ctx.drawImage(origImg, 0, 0, canvas.height, canvas.width);
return canvas.toDataURL("image/jpeg");
},
Запуск этой функции как естьзапускает следующую консольную ошибку:
Не удалось выполнить 'drawImage' для 'CanvasRenderingContext2D': предоставленное значение не относится к типу '(CSSImageValue или HTMLImageElement или SVGImageElement, или HTMLVideoElement, или HTMLCanvasElement, или ImageBitmap, или ImageBitmap или OffscreenCanvas)
Как получить / повторно использовать объект origImg из функции resizeImage, чтобы я мог использовать его в функции rotateImage?