You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Canvas缩放图片无法显示问题求助:100×100缩略图不显示

问题分析与解决方案

你的代码问题在于创建了空白的ImageData却没有填充原图的缩放像素:new ImageData(100,100)只是生成了一个100×100的全透明空像素缓冲区,完全没有关联原图的内容,所以调用putImageData后自然看不到任何图像。

最简便的解决方案:直接用drawImage的缩放参数

Canvas的drawImage方法本身支持直接缩放绘制,不需要手动处理ImageData,这是最高效的方式:

let canvas = document.getElementById("demoCanvas");
let context = canvas.getContext("2d");

let image = new Image();
image.src = "corgi.png";
image.onload = () => {
  // 绘制原图
  context.drawImage(image, 0, 0);
  
  // 绘制缩放后的100×100图片(参数:图像源、目标X、目标Y、目标宽度、目标高度)
  context.drawImage(image, 500, 0, 100, 100);
};

如果需要手动处理ImageData(比如自定义像素操作)

如果确实需要获取缩放后的ImageData进行后续处理,可以通过临时Canvas中转:

let canvas = document.getElementById("demoCanvas");
let context = canvas.getContext("2d");

let image = new Image();
image.src = "corgi.png";
image.onload = () => {
  context.drawImage(image, 0, 0);
  
  // 创建临时Canvas用于缩放原图
  const tempCanvas = document.createElement('canvas');
  tempCanvas.width = 100;
  tempCanvas.height = 100;
  const tempCtx = tempCanvas.getContext('2d');
  
  // 将原图缩放到临时Canvas
  tempCtx.drawImage(image, 0, 0, 100, 100);
  
  // 获取缩放后的像素数据并绘制到主Canvas
  const smallImageData = tempCtx.getImageData(0, 0, 100, 100);
  context.putImageData(smallImageData, 500, 0);
};

内容的提问来源于stack exchange,提问作者Baby Shark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:35:23