【发布时间】:2022-01-01 19:09:31
【问题描述】:
我正在尝试使用 CanvasRenderingContext2D.drawImage 缩放具有透明像素的图像,但每当我绘制图像时,我最终得到的是原始大小的图像和画布上绘制的缩放版本。这是一些重现故障的代码:
<canvas id="cvs" width=200 height=100></canvas>
const canvas = document.getElementById('cvs');
const ctx = canvas.getContext('2d');
ctx.imageSmoothingEnabled = false;
const imageData = ctx.createImageData(100, 50);
const data = imageData.data;
for (var i = 0; i < data.length; i += 4) {
if (i % 400 > 360) {
data[i] = 255;
data[i + 1] = 0;
data[i + 2] = 0;
data[i + 3] = 255;
}
else {
data[i] = 0;
data[i + 1] = 0;
data[i + 2] = 0;
data[i + 3] = 0; // Change this to 255 to get rid of the glitch
}
}
ctx.putImageData(imageData, 0, 0);
ctx.drawImage(canvas, 0, 0, 100, 50, 0, 0, 200, 100);
https://jsfiddle.net/o4sv6qhb/2/
我不明白为什么会这样。如果我不使用任何透明像素,那么问题就会消失。
我想一种解决方法是直接填充最终尺寸图像的像素而不使用 drawImage 的缩放,但我宁愿不必这样做。
【问题讨论】:
标签: javascript html5-canvas drawimage