canvas应用——将方形图片处理为圆形

时间:2022-07-29 20:28:41

上段时间在项目中需要将方形图片处理为圆形图片,你可能会说直接用css设置border-radius: 50%就可以了,但是项目中还要将此图片的圆形图片作为一部分利用canvas将其绘制到一张背景图上面,所以就有了为何要用canvas来处理了。

我们知道 <canvas> 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形。我将本例中的主要处理函数封装为一个方法,可以直接使用。

例子

你可以直接点击此处查看 例子 ,先一睹为快。

参数

参数 描述
img 图片(img)对象
oldImgWidth 原始图片(img)的实际宽度(非css设置的)
oldImgHeight 原始图片(img)的实际高度(非css设置的)

代码

/** * 把图片处理成圆形,如果不是正方形就按最小边一半为半径处理 * @param {[type]} img 图片(img)对象 * @param {[number]} oldImgWidth 原始图片(img)的实际宽度(非css设置的) * @param {[number]} oldImgHeight 原始图片(img)的实际高度(非css设置的) * @return {[type]} return base64 png图片字符串 */
function circle_image(img, oldImgWidth, oldImgHeight) {
    var width, height, canvas, contex, circle;
    if (img.width > img.height) {
        width = img.height;
        height = img.height;
    } else {
        width = img.width;
        height = img.width;
    }
    canvas = document.createElement('canvas');
    if (!canvas.getContext) { // 判断浏览器是否支持canvas,如果不支持在此处做相应的提示
        console.log('您的浏览器版本过低,暂不支持。');
        return false;
    }
    canvas.width = width;
    canvas.height = height;
    contex = canvas.getContext("2d");
    circle = {
        x: width / 2,
        y: height / 2,
        r: width / 2
    };
    contex.clearRect(0, 0, width, height);
    contex.save();
    contex.beginPath();
    contex.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, false);
    contex.clip();
    contex.drawImage(img, 0, 0, oldImgWidth, oldImgHeight, 0, 0, width, height);
    contex.restore();
    return canvas.toDataURL('image/png');
}