数不尽的坑,其实都是自己没有耐心每端小程序去阅读api导致。
首先以微信实现为例,this.saveImgPath为当前选中图片地址。(选中图片部分就不赘述了,uni.chooseImage。自行查阅)
基本思路,将选中的图片,通过各端drawImage绘制到canvas中,然后获取截图部分canvasGetImageData(采用图片(10,10)作标点的像素)
微信端
- canvas取 canvas-id,
- drawImage参数为
drawImage(String imageResource, Number sx, Number sy, Number sWidth, Number sHeight,Number dx, Number dy, Number dWidth, Number dHeight) - 调用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 -->