小程序 页面横屏的时候调用takePhoto拍照的方法,横屏展示的时候图片会竖着展示,会自己旋转

        如上图我在横屏调用takePhoto的时候会自己旋转,这就成竖屏展示的了???竖屏展示你倒是展示全点啊,去微信开发社区问,这半天也不回一句话。。。(这是我提的问题链接)  https://developers.weixin.qq.com/community/develop/doc/000686b152c0e805694a398d951c00 

 求人不如求己还是自己试试吧,今天被我试出来了,下面说下解决方法

1.首先需要在wxml里面添加一个画布我们需要在画布上面操作这个图片  

 <canvas canvas-id="my-canvas" class="my-canvas" wx:if="{{isBackShow}}">

  样式的话 width: 100%; height: 100vh;

  样式可以动态设置图片的大小,我在横屏下动态设置的话图片显示的不全,所以就干脆100%了

2.调用拍照的方法Takephoto方法得到图片的URL然后去操作图片,代码看下面吧 

 const ctx = wx.createCameraContext()
      ctx.takePhoto({
        quality: 'normal',
        success: (res) => {
          let url = res.tempImagePath;
          wx.getImageInfo({
            src: url,
            success:res=>{
              let canvasContext = wx.createCanvasContext('my-canvas', this)
              // 下面按比例写死宽度高度是为了压缩图片提升上传速度,可按实际需求更改
              let rate = res.height / res.width 
              let width =res.width
              let height = res.height * rate
              switch (res.orientation) { // 根据orientation值处理图片
                case ("up"):
                  //不需要旋转
                  canvasContext.drawImage(url, 0, 0, width, height+100);
                case ("down"):
                  //不需要旋转
                  canvasContext.drawImage(url, 0, 0, width, height+100);
                  break;
                case ("left"):
                  // canvasContext.translate(height, width / 3)
                  // canvasContext.rotate(0 * Math.PI / 180)
                  canvasContext.drawImage(url, 0 , 0, width-200, height+100);
                  break;
                case ("right"):
                  // canvasContext.translate(height, width / 3)
                  // canvasContext.rotate(0 * Math.PI / 180)
                  canvasContext.drawImage(url, 0 , 0, width-200, height+100);
                  break;
              }
              canvasContext.draw(false, () => { // 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中
                wx.canvasToTempFilePath({ // 把当前画布指定区域的内容导出生成指定大小的图片。在 draw() 回调里调用该方法才能保证图片导出成功。
                  canvasId: 'my-canvas',
                  success(res) {
                    let filePath = res.tempFilePath
                    //这里可以直接展示图片 

                  }
                }, this)// 在自定义组件下,当前组件实例的this,以操作组件内 canvas 组件
              })
            }
          })
        }

  如果按照上面的代码还有问题的话可以调整下面的三个方法。

   // canvasContext.translate(height, width / 3)
   // canvasContext.rotate(0 * Math.PI / 180)
   canvasContext.drawImage(url, 0 , 0, width-200, height+100);

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在微信小程序中,我们可以通过设置摄像机组件的属性来控制拍摄的照片尺寸。具体来说,我们需要在组件中设置 `device-position` 属性以指定使用前置或后置摄像头,`flash` 属性以指定闪光灯模式,`frame-size` 属性以指定照片尺寸等。 要设置照片尺寸为4:3,我们可以使用 `frame-size` 属性设置一个具有特定宽高比的照片尺寸。例如,我们可以将 `frame-size` 设置为 `"medium"`,并在 `camera` 组件中添加一个 `bindinit` 事件监听器来在初始化时设置照片尺寸。具体代码如下所示: ```html <camera device-position="back" flash="off" frame-size="medium" bindinit="onCameraInit"></camera> ``` ```javascript Page({ onCameraInit: function (e) { const { width, height } = e.detail.ctx.videoFrameSize; const ratio = 4 / 3; let frameSize = null; for (let size of e.detail.ctx.frameSizes) { if (size.width / size.height === ratio) { frameSize = size; break; } } if (frameSize !== null) { e.detail.ctx.frameSize = frameSize; } else { e.detail.ctx.frameSize = { width: Math.round(height * ratio), height: height, }; } } }) ``` 在上面的代码中,我们首先将 `frame-size` 设置为 `"medium"`,然后在 `bindinit` 事件监听器中获取摄像机组件的 `videoFrameSize` 属性以获取当前的摄像头分辨率。接着,我们遍历摄像机组件的 `frameSizes` 属性以查找一个宽高比为4:3的照片尺寸,如果找到了则将 `ctx.frameSize` 设置为该尺寸,否则根据摄像头分辨率计算一个最接近4:3宽高比的尺寸。 注意,由于不同的设备和平台支持的照片尺寸可能不同,因此上述代码可能需要根据实际情况进行调整。另外,我们还需要在 `camera` 组件中添加一个权限请求,以请求用户授权访问摄像头和麦克风。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值