| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /**
- *
- *
- * 图片压缩
- *
- *
- */
- /**
- * 给的文件资源是否小于LimitSize (M), 小于走lessCallBack, 大于走moreCallBack
- */
- export function imageSizeIsLessLimitSize(
- imagePath: string,
- limitSize: number,
- lessCallBack: () => void,
- moreCallBack: () => void
- ): void {
- uni.getFileInfo({
- filePath: imagePath,
- success(res) {
- console.log("压缩前图片大小:", res.size / 1024, 'kb');
- if (res.size > 1024 * 1024 * limitSize) {
- moreCallBack();
- } else {
- lessCallBack();
- }
- }
- });
- }
- // 主调用方法
- /**
- * 获取小于限制大小的Image, limitSize默认为1M,递归调用。
- */
- export function getLessLimitSizeImage(
- canvasId: string,
- imagePath: string,
- limitSize: number = 1,
- drawWidth: number,
- callBack: (path: string) => void
- ): void {
- imageSizeIsLessLimitSize(imagePath, limitSize,
- () => {
- callBack(imagePath);
- },
- () => {
- uni.getImageInfo({
- src: imagePath,
- success: function (imageInfo) {
- var maxSide = Math.max(imageInfo.width, imageInfo.height);
- //画板的宽高默认是windowWidth
- var windowW = drawWidth;
- var scale = 1;
- if (maxSide > windowW) {
- scale = windowW / maxSide;
- }
- var imageW = Math.floor(imageInfo.width * scale);
- var imageH = Math.floor(imageInfo.height * scale);
- console.log('调用压缩', imageW, imageH);
- getCanvasImage(canvasId, imagePath, imageW, imageH,
- (pressImgPath: string) => {
- getLessLimitSizeImage(canvasId, pressImgPath, limitSize, drawWidth * 0.7, callBack);
- }
- );
- }
- });
- }
- );
- }
- /**
- * 获取画布图片
- */
- function getCanvasImage(
- canvasId: string,
- imagePath: string,
- imageW: number,
- imageH: number,
- getImgsuccess: (path: string) => void
- ): void {
- // TODO: UniApp 中 canvas 的使用方式与微信小程序不同,需要根据实际情况调整
- // const ctx = uni.createCanvasContext(canvasId);
- // ctx.drawImage(imagePath, 0, 0, imageW, imageH);
- // ctx.draw(false, () => {
- // uni.canvasToTempFilePath({
- // canvasId: canvasId,
- // x: 0,
- // y: 0,
- // width: imageW,
- // height: imageH,
- // quality: 1,
- // success(res) {
- // getImgsuccess(res.tempFilePath);
- // }
- // });
- // });
- console.warn('getCanvasImage 需要根据 UniApp 的 canvas API 进行调整');
- }
|