cropper图片编辑插件绘制圆形图片

本文介绍如何利用Cropper.js插件结合CSS和canvas,实现类似QQ的圆形头像选取功能。通过调整样式和使用canvas绘制圆形区域,确保裁剪后的头像呈现完美圆形,并解决导出图片时的底色问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

项目中有一个编辑上传用户头像的功能,之前选用了cropper插件来处理编辑图片的功能,现在还想做到类似QQ等选取圆形图像的功能,考虑结合cropper来处理。

方案

  • 样式上通过CSS来控制cropper选取框为圆形
.cropper-view-box, .cropper-face {
    border-radius: 50%;
}
  • 处理图片时通过canvas来实现
function getRoundedCanvas(){    
    var crop=(...).data("cropper");                                                        //获取crop对象
    var sourceCanvas=crop.getCroppedCanvas();
    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    var width = sourceCanvas.width;
    var height = sourceCanvas.height;
    canvas.width = width;
    canvas.height = height;
    context.imageSmoothingEnabled = true;
    context.drawImage(sourceCanvas, 0, 0, width, height);
    context.globalCompositeOperation = 'destination-in';
    context.beginPath();
    context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true);
    context.fill();
    return canvas;
}

其它注意点

需要注意的是,如果通过toDataUrl方式转图片时,在格式为jpg的情况下,得到的圆图的底色可能会变成黑色,这是因为在转jpg的过程中,原先的透明度属性会丢失,这里我是通过统一设置图片转换格式为png格式来解决的。

var dataurl=canvas.toDataURL("image/png");
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
    u8arr[n] = bstr.charCodeAt(n);
}
var filename=(...);
var f=new File([u8arr],filename,{type:"image/png"});

查阅文档的传送门

1.fengyuanchen/cropperjs · GitHub
2.cropperjs
3.canvas参考手册

csdn地址

芊芊寻

版权申明

此文章版权为本人所有,非经本人许可禁止复制转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值