收藏
回答

camera组件视野宽高比不为4:3时,为什么拍摄的照片对物体进行了放大?

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug camera 微信安卓客户端 7.0.7 2.7.2

你好!

项目使用API "takePhoto" + 组件"camera"来实现拍照功能。因为需要根据照片中物体大小来计算手机与物体的距离,所以要求拍摄的照片不能对物体进行放大。但实验发现,camera组件在视野宽高比不为4:3时,拍摄的照片对物体进行了放大。

相关情况如下:

1、测试条件

1)华为Mate10

2)竖屏拍照,定义短的一边为宽,长的一边为高,则手机屏幕宽高比为9:16

2、代码及测试方法

【WXML】

<camera device-position="back" flash="off" frame-size="large" binderror="cameraError" class="camera-view"></camera>

【WXSS】

.camera-view {

width: 100%;

height: 1000rpx; /* 测试时使用不同的height值 */

margin-top: 5rpx;

}

测试时,WXSS camera-view中的height使用不同的值,然后在同一个位置对同一个键盘进行拍照。根据照片中按键的数量和大小确定放大情况。

3、测试结果

1)“height: 300rpx”时拍摄的照片


2)height: 562.5rpx”时拍摄的照片。这种情况下图像宽:高=750rpx:562.5rpx=4:3。


3)“height: 1000rpx”时拍摄的照片。



4、分析

对比3中的图片按键的大小可以得知,宽高比不为4:3时,都进行了放大。对比第二张图片与第三张图片,第三张图片中横向按键数量明显少于第二张图片,表明横向上可以覆盖的景物范围明显减少。可见:

1)API/组件在拍照并获取照片时对宽高比进行判断,若不是4:3,则进行图像放大。然后根据设定的width与height截取放大后图像的左上角那一部分(感觉如此操作)。而更常规或者合理的做法是不进行放大,根据设定的width与height直接截取图像(当然,若camera能增加参数给开发者用于图像的放大,或许不失为一个好主意);

2)放大以后,导致横向上可以覆盖的景物范围减少;

3)为了图像不被放大,height设为562.5rpx,则对于9:16宽高比的手机来说,纵向上的大部分像素点都被浪费了。

总的来说,组件自动执行的放大这个动作不为开发者所控制,不是一个合理的做法。烦请查看并确认该问题,等候回复,谢谢!



回答关注问题邀请回答
收藏

1 个回答

  • Silvan
    Silvan
    2019-11-01

    其他手机测试了吗?

    2019-11-01
    赞同
    回复 1
    • 零时零刻
      零时零刻
      2019-11-02
      一样的,小米9
      2019-11-02
      回复
登录 后发表内容
问题标签