uni-app 微信小程序调用takePhoto启用闪光灯拍照时,闪光灯闪一下后相机立即关闭,导致照片黑屏

uni-app 微信小程序调用takePhoto启用闪光灯拍照时,闪光灯闪一下后相机立即关闭,导致照片黑屏

开发环境 版本号 项目创建方式
Windows HBuilderX
产品分类:uniapp/小程序/微信

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:windows10

HBuilderX类型:正式

HBuilderX版本号:3.99

第三方开发者工具版本号:1.06

基础库版本号:1.06.2402030

示例代码:

```javascript
data() {
    return {
        getHeight: '200', // camera 组件高度
        device: 'back', //前置或后置摄像头,值为front, back
        frame: 'large', //指定期望的相机帧数据尺寸
        flash: 'on', // 闪光灯,值为auto, on, off
        nowTime: '', //日期
        nowTime2: '', //时间
        name: '',
        liftName: '',
        address: '', //当前地址信息
        sgdUrl: '../../static/sgd.png', // 闪光灯图片地址
        xzUrl: '../../static/xz.png',
        leftUrl:'../../static/left.png',
        top: 40,
    }
},
// 点击拍照
takePhoto() {
    var that = this;
    const ctx = uni.createCameraContext();
    // 创建并返回 camera 组件的上下文 cameraContext 对象  
    // 拍照  
    ctx.takePhoto({
        quality: 'high', // 图片质量高  
        success: (res) => {
            var tempImagePath = res.tempImagePath; // 临时图片路径  
        }
    });
}

操作步骤: 在光线不好的情况下,拍照即可

预期结果: 拍照会等待成像后闪光灯才关闭

实际结果: 安卓手机闪光灯只闪一下就关闭了,导致照片一片漆黑

bug描述: 我用的是小米手机k50,包括其他同事的华为p40都是这个问题。拍照闪光灯只闪一下马上关闭,拍照还没成像。 但是用另一个同事的苹果14p就正常,会等待成像后才关闭闪光灯。


更多关于uni-app 微信小程序调用takePhoto启用闪光灯拍照时,闪光灯闪一下后相机立即关闭,导致照片黑屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

请向微信小程社区反馈

更多关于uni-app 微信小程序调用takePhoto启用闪光灯拍照时,闪光灯闪一下后相机立即关闭,导致照片黑屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-app 开发微信小程序时,调用 takePhoto 方法启用闪光灯拍照时,如果出现闪光灯闪一下后相机立即关闭,导致照片黑屏的问题,可能是由于以下几个原因导致的:

1. 相机生命周期管理问题

微信小程序的相机组件 (camera) 和 takePhoto 方法的调用顺序可能存在问题。确保在调用 takePhoto 之前,相机已经正确初始化并且处于可用状态。

2. 异步操作问题

takePhoto 是一个异步操作,如果在你调用 takePhoto 之后立即关闭相机,可能会导致照片还未生成就被关闭。因此,需要在 takePhoto 的成功回调中确保照片已经生成后再进行其他操作。

3. 闪光灯设置问题

确保闪光灯设置正确,并且在拍照时闪光灯已经正常开启。

解决方案

1. 确保相机已经正确初始化

在调用 takePhoto 之前,确保相机组件已经正确初始化并处于可用状态。

<camera id="camera" device-position="back" flash="on" binderror="onCameraError"></camera>
<button @tap="takePhoto">拍照</button>

2. 在 takePhoto 的成功回调中处理照片

takePhoto 的成功回调中处理照片,确保照片已经生成后再进行其他操作。

methods: {
  takePhoto() {
    const ctx = uni.createCameraContext();
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        console.log('拍照成功', res.tempImagePath);
        // 在这里处理照片,例如显示或上传
        this.imagePath = res.tempImagePath;
      },
      fail: (err) => {
        console.error('拍照失败', err);
      }
    });
  },
  onCameraError(e) {
    console.error('相机错误', e.detail);
  }
}

3. 确保闪光灯设置正确

在相机组件中设置 flash="on",确保闪光灯在拍照时能够正常开启。

<camera id="camera" device-position="back" flash="on"></camera>
回到顶部