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

如何解决Webcam生成的Data URL图片尺寸过小问题?

解决摄像头捕获图片尺寸过小的问题

你遇到的问题根源是canvas元素默认尺寸为300x150,且未根据视频流的实际分辨率调整canvas大小。以下是具体优化方案:

核心优化步骤

  • 视频流加载完成后,获取视频的实际分辨率(video.videoWidth和video.videoHeight),将canvas的宽高同步设置为对应值
  • 确保drawImage使用正确的尺寸绘制,避免拉伸或压缩画面

修改后的完整代码

var video = document.querySelector("#videoElement");
var photo_button = document.querySelector("#photo_button");
const canvas = document.createElement('canvas');

if (navigator.mediaDevices.getUserMedia) {
  navigator.mediaDevices.getUserMedia({ video: true })
    .then(function (stream) {
      video.srcObject = stream;
      // 监听视频元数据加载完成事件,获取实际分辨率
      video.onloadedmetadata = function() {
        // 将canvas宽高设置为视频的真实分辨率
        canvas.width = video.videoWidth;
        canvas.height = video.videoHeight;
      };
    })
    .catch(function (error) {
      console.log("获取摄像头流失败:", error);
    });
}

photo_button.addEventListener('click', function() {
  const ctx = canvas.getContext('2d');
  // 按canvas实际尺寸绘制视频画面
  ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
  // 第二个参数可调整JPEG画质(0-1,默认0.92)
  let image_data_url = canvas.toDataURL('image/jpeg', 0.9);

  console.log(image_data_url);
});

额外优化:指定摄像头分辨率约束

如果需要固定获取特定分辨率的视频流,可在getUserMedia参数中明确指定,例如要求1080P:

navigator.mediaDevices.getUserMedia({ 
  video: { 
    width: { ideal: 1920 },
    height: { ideal: 1080 }
  } 
})

注:实际分辨率取决于用户设备摄像头的支持情况,ideal表示优先选择该分辨率,设备会返回最接近的可用分辨率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:19:47