1. 程式人生 > >cropper圖片編輯外掛繪製圓形圖片

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參考手冊