混合App应用实现本地头像剪切,压缩上传功能(支持任何H5框架)

本文介绍了一种混合App应用中实现头像剪切和压缩上传的解决方案,详细阐述了如何利用插件和支持代码进行操作,并提供了安装和调用方法。通过修复已有的代码issue,实现了正方形头像切图和缩放功能,同时利用H5的canvas进行图片压缩,确保上传的质量和效率。
摘要由CSDN通过智能技术生成

头像上传是任何一个应用都会用到的功能,但是头像的尺寸往往需要控制一下,这样会有一个比较不错的显示效果,例如我们通常会控制用户的头像为正方形,这个切圆角边的时候不会变形,显示位置也很固定。

对于H5混合应用来讲,我们就需要插件做为支持, 今天来讲一下我的解决方案, 此方案参考参考了如下几个作者的代码,非常感谢这几位作者的代码,解决了很大问题,但是存在小的issue,我修复了一下:

jeduan作者的插件:

https://github.com/jeduan/cordova-plugin-crop

原生代码支持作者

https://github.com/kishikawakatsumi/PEPhotoCropEditor

https://github.com/jdamcd/android-crop

folk的代码,做了小的更改和issue修复。

主要是对于头像上传固定于正方形切图,并且可以缩放,保证用户的显示尺寸,有点类似于微信的头像上传!

https://github.com/jiangbophd/cordova-plugin-crop

安装

cordova plugin add https://github.com/jiangbophd/cordova-plugin-crop

调用方法:

plugins.crop(function success (url) {
    //新的url
}, function fail () {

}, 'local image url', {quality: 30})

头像剪切后后返回一个新的url,我们默认显示这个url即可。

压缩上传

混合应用是既存在JS代码,也存在native代码,所以压缩上传的方案有很多,可以native也可以JS。

这里鉴于头像只上传一张,所以可以用H5的canvas进行压缩处理。因为我们的头像剪切的时候已经对头像质量做了一个控制:

{quality: 30}

如果想进一步压缩的话,可以用如下代码:

let image = new Image(),
            canvas = document.createElement("canvas"),
            ctx = canvas.getContext("2d"),
            ext = image.src.substring(image.src.lastIndexOf(".") + 1).toLowerCase();
        image.src = imgUrl;
        canvas.width = image.width;
        canvas.height = image.height;
        ctx.drawImage(image, 0, 0, image.width, image.height);
        console.log(canvas.toDataURL("image/" + ext));
        return canvas.toDataURL("image/" + ext);

最终图片被转换成base64编码,服务器就可以正常接收了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天外野草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值