1. 程式人生 > >使用canvas生成一個圓形的圖片

使用canvas生成一個圓形的圖片

之前發現在網上無法找到相關的內容,找的內容測試也發現有bug。遂,整理思路,自己研究一個可以實現效果的功能。

具體思路就是:首先獲取到圖片的資源,如果使用img載入的,那一定要等img觸發onload以後處理。
我使用的圖片是等寬高的圖片,獲取到圖片資源以後,額外的建立一個canvas,將影象使用drawImage方法畫到畫布上,我們在這個canvas上面處理影象。通過canvas物件的context的createPattern建立一個pattern物件。這個物件不但可以實現重複影象,還可以將我們需要影象資源儲存下來,並且賦值給填充物件fillStyle。
建立好pattern物件後,我們就可以使用clearRect方法,將畫布清空。
然後,進行畫圓操作,使用context的arc方法畫圓。
最後,呼叫fill方法填充即可。

簡單的案例程式碼:

ctx.fillStyle = ctx.createPattern(img, 'no-repeat');
ctx.clearRect(0, 0, num, num);
ctx.arc(r, r, r, 0, Math.PI * 2);
ctx.fill();

canvasCtx.drawImage(pixelCanvas, x - r, y - r, num, num);

由於急著下班,就沒有單獨寫案例,從專案裡面把程式碼拷貝出來顯示一下。
重點就是需要建立一個額外處理影象的canvas,處理好以後就可以將這個canvas的資料使用drawImage方法放到你的canvas裡面了。

完整案例程式碼

<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>canvas畫布實現圓形圖片</title>
</head>
<body>
<canvas id="canvas" style="margin: 0 auto; display: block;"></canvas>
<canvas id="pixelCanvas"></canvas>
</body>
<script>
    var canvas = document.getElementById('canvas');
    let img = new Image();
    //這裡直接修改圖片的路徑
    img.src = "meinv.jpg";
    img.onload = function () {

        canvas.width = img.width;
        canvas.height = img.height;

        let ctx = canvas.getContext("2d");

        //獲取圖片寬高的最小值
        let min = Math.min(img.width, img.height);
        let r = min/2;

        ctx.fillStyle = ctx.createPattern(img, 'no-repeat');
        ctx.clearRect(0, 0, img.width, img.height);
        ctx.arc(img.width/2, img.height/2, r, 0, Math.PI * 2);
        ctx.fill();
    };
</script>
</html>