为何竖屏480×640分辨率被标注为4:3而非3:4?
宽高比标注与JS相机API的逻辑差异解释
核心矛盾:「传感器原生比例」vs「图像数据存储比例」
- 公式
r = w/h是图像像素数据的存储宽高比:竖屏480×640的像素数据,w=480、h=640,计算得0.75=3:4,这是纯像素层面的比例。 - 安卓相机、谷歌等平台标注的是传感器的原生物理宽高比:绝大多数手机相机传感器的原生状态是横屏的,比如原生分辨率是640×480(宽640、高480),对应比例4:3。竖屏拍摄时,系统只是把传感器输出的图像旋转90度后存储为480×640,但仍沿用传感器原生的4:3标注——因为这是硬件的固有比例,和拍摄方向无关。
JS视频相机输入的变形原因
在getUserMedia这类相机API中,aspectRatio约束参数的逻辑是匹配传感器原生比例,而非图像数据的当前存储比例:
- 指定
aspectRatio: 4/3时,API直接匹配传感器原生的4:3比例,即使图像因竖屏旋转变成480×640,浏览器会自动处理旋转后的像素映射,确保显示比例正确无变形。 - 指定
aspectRatio: 3/4时,API会尝试寻找像素存储比例为3:4的流,但你的传感器原生是4:3,没有该比例的硬件输出,只能拉伸现有4:3的流强制适配,最终导致图像变形。
总结
- 平台标注的宽高比以硬件原生状态为准,图像数据的宽高比以存储的像素尺寸为准,两者因旋转操作产生差异。
- JS相机API的比例约束基于硬件原生比例,而非存储的像素比例,因此需与传感器原生比例一致才能避免变形。
内容的提问来源于stack exchange,提问作者Z0q
相关产品推荐
相关产品推荐

