微信、支付宝、百度(drawImage及canvasGetImageData、支付宝(getImageData))踩坑,uni-app 获取图片底色像素值

本文介绍了在微信、支付宝、百度小程序中使用uni-app获取图片底色像素值的过程,强调了踩坑经历。通过drawImage在canvas上绘制图片,然后利用canvasGetImageData或getImageData获取像素数据。微信端需指定canvas-id,支付宝端图片需转为base64,百度端drawImage参数顺序与其它两端不同,并需额外处理像素对象。
摘要由CSDN通过智能技术生成

数不尽的坑,其实都是自己没有耐心每端小程序去阅读api导致。

首先以微信实现为例,this.saveImgPath为当前选中图片地址。(选中图片部分就不赘述了,uni.chooseImage。自行查阅)

基本思路,将选中的图片,通过各端drawImage绘制到canvas中,然后获取截图部分canvasGetImageData(采用图片(10,10)作标点的像素)

在这里插入图片描述
在这里插入图片描述

微信端

  1. canvas取 canvas-id,
  2. drawImage参数为
    drawImage(String imageResource, Number sx, Number sy, Number sWidth, Number sHeight,Number dx, Number dy, Number dWidth, Number dHeight)
  3. 调用uni.canvasGetImageData,获取像素数组(一维)

支付宝端
4. canvas取 id,
5. drawImage参数为
drawImage(String base64, Number sx, Number sy, Number sWidth, Number sHeight,Number dx, Number dy, Number dWidth, Number dHeight) 注意,图片为base64
6. 调用canvas的实例方法getImageData,获取像素数组(一维)

百度端
7. canvas取 canvas-id,
8. drawImage参数为
drawImage(String imageResource, Number dx, Number dy, Number dWidth, Number dHeight,Number sx, Number sy, Number sWidth, Number sHeight)
9. 调用uni.canvasGetImageData,获取像素对象(一维)需用Array.from(colors)处理

<template>
    <view style="height: 100vh;width: 100vw;position: fixed; left: 200%">
      <!-- #ifndef MP-ALIPAY -->
      <canvas canvas-id="image-canvas" style="width:100%;height: 100%;"></canvas>
      <!-- #endif -->
  
UniApp在进行微信分享时,由于微信图片大小有严格的限制,如果直接分享未经压缩的大图可能导致超过20KB的阈值而无法成功分享。为了解决这个问题,你可以采取以下步骤进行图片压缩: 1. **使用第三方库**:UniApp生态中有许多图片处理插件如`uni-image-compressor`,它们可以帮助你压缩图片到合适的大小。安装并引入这个插件后,可以调用其API来压缩图片。 ```javascript import imageCompress from '@vant/image'; async function compressImage(file) { const result = await imageCompress.compress({ file, quality: 0.8, // 设置压缩质量,范围0-1,默认0.8 width: 400, // 可选,压缩后的宽度,超出则等比例缩放 height: 400, // 可选,压缩后的高度,超出则等比例缩放 }); return result.url; // 返回压缩后的URL } ``` 2. **前端压缩**:如果你不想引入外部库,也可以通过JavaScript原生的`FileReader`和`Canvas` API进行图片压缩。 ```javascript function compressImageBase64(file, maxWidth, maxHeight) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { const img = document.createElement('img'); img.src = reader.result; img.onload = () => { const canvas = document.createElement('canvas'); canvas.width = maxWidth || img.width; canvas.height = maxHeight || img.height; const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); const dataUrl = canvas.toDataURL('image/jpeg', 0.8); // 压缩质量 resolve(dataUrl); }; }; reader.readAsDataURL(file); }); } // 使用示例 compressImageBase64(file).then(compressedUrl => { wx.ready(() => { wx.updateAppMessageShareData({ title: '分享标题', desc: '分享描述', imgURL: compressedUrl, success() { console.log('分享成功'); } }); }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值