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

实现

在上传图片前需要对图片进行编辑,我选用的是cropperjs插件

绘制圆图的主要思路首先是将图片选取框中的可见区域设置为圆形,再在上传图片时在原图的基础上通过JS选取出一个圆图,再将选取的圆图上传到后台接口

  • 通过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;
}
  • 通过步骤2即可得到一个圆图的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. cropperjs圆形处理
  2. cropperjs文档
  3. canvas参考手册

猜你喜欢

转载自www.cnblogs.com/yumikobu/p/9897179.html
今日推荐