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

HTML Canvas渲染超长宽比图片时出现长条状条纹问题求助

HTML Canvas渲染超长宽比图片时出现长条状条纹问题求助

大家好,我最近碰到一个HTML Canvas的诡异问题,想请教下各位有没有遇到过或者知道怎么解决:

HTML的<canvas>元素在渲染**宽高比悬殊(宽度远大于高度)**的图片时,总会出现*长条状条纹(streak)*的渲染瑕疵。

我自己的测试场景是这样的:用了一张JPEG格式的图片,尺寸为42577px(宽)×903px(高),文件大小1.5MB,按照常规方法绘制到Canvas里。但图片在Canvas中显示时,大概从75%的位置开始,一直到图片末尾,都会出现很长的条纹。我换了好几张类似宽高比的图片测试,结果都一样,渲染后的图片带有明显的长条瑕疵。

一开始我以为是图片尺寸太大导致的,于是把图片大幅缩小了尺寸,但不管缩到多大,条纹总是出现在差不多的位置,问题完全没有改善。

我准备了一张能稳定触发这个问题的样本JPEG图,用它配合下面的代码就能复现问题:

测试代码

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
const canvasWidth = 1000;
const image = new Image();
image.src = `样本问题图片路径`; // 替换为触发问题的样本图片地址

image.addEventListener("load", (e) => {

  let width = image.width;
  let height = image.height;

  // 计算保持宽高比的新尺寸
  if (width > canvasWidth) {
    height *= canvasWidth / width;
    width = canvasWidth;
  }
  ctx.drawImage(image, 0, 0, width, height);
});
<canvas id="myCanvas" width="1000" height="100"/>

用上面的代码渲染样本图后,Canvas就会出现那种奇怪的长条条纹。

有没有大佬知道这是什么原因导致的?或者有没有什么办法可以解决这个问题呀?

备注:内容来源于stack exchange,提问作者Marc Reed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:03:06