微信小程序canvas把正方形图片绘制成圆形

本文介绍如何在微信小程序中使用canvas实现图片的圆形裁剪效果。通过保存和恢复绘图状态、绘制圆形并进行剪切,最终将指定图片显示在设定的圆形区域内。

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

在微信小程序里效果图:

直接代码:

<canvas style="width: 400px; height: 400px;border:1px solid red" canvas-id="firstCanvas"></canvas>
//index.js
Page({
    data: {
        image: {
            src: "/1.png",
            width: 200,
            heigth: 200
        }
    },
    onLoad: function () {
        let that = this;
        var contex = wx.createCanvasContext('firstCanvas')
        contex.save(); // 先保存状态 已便于画完圆再用
        contex.beginPath(); //开始绘制
        //先画个圆
        contex.arc(100, 100, 100, 0, Math.PI * 2, false);
        contex.clip();//画了圆 再剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内
        contex.drawImage(that.data.image.src, 0, 0, that.data.image.width, that.data.image.heigth); // 推进去图片
        contex.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 可以继续绘制
        contex.draw();
    }
})

 

 

 

 

 

### 微信小程序实现圆形裁剪图片的方法 #### 使用we-cropper插件 为了在微信小程序中实现圆形裁剪功能,推荐使用`we-cropper`这个专门为微信小程序开发的轻量级图片裁剪组件[^1]。该组件不仅提供了丰富的特性如自定义裁剪尺寸、定点等比例缩放等功能,还特别支持裁剪圆角图片(包括圆形和圆角矩形),这正是当前需求所需要的。 #### 初始化Canvas并配置Cropper 首先,在页面WXML文件里放置canvas标签用于承载待处理的图像: ```xml <canvas type="2d" id="cropperCanvas"></canvas> ``` 接着,在对应的JS逻辑层初始化`we-cropper`实例,并设置其参数来适应圆形裁剪的需求: ```javascript const ctx = wx.createContext('2d'); Page({ onLoad() { this.cropper = new WeCropper({ id: '#cropperCanvas', width: 300, height: 300, cut: { x: (this.data.width - 200) / 2, // 中心位置X坐标 y: (this.data.height - 200) / 2, // 中心位置Y坐标 width: 200, // 定义裁切区宽度 height: 200, // 定义裁切区高度 fixedBox: true // 是否固定裁剪框大小不可改变,默认false }, circle: true // 设置为true表示启用圆形裁剪模式 }); } }); ``` 上述代码片段设置了裁剪区域为中心定位的一个正方形,通过指定`circle:true`开启圆形裁剪选项[^3]。 #### 加载与显示图片 为了让用户能够上传自己的照片来进行裁剪操作,可以在界面上提供按钮触发选择本地图片的动作,并将其展示于布之上: ```javascript chooseImage() { const _this = this; wx.chooseImage({ count: 1, success(res) { let tempFilePaths = res.tempFilePaths; _this.setData({ uer_icon:tempFilePaths[0]}); _this.cropper.pushOrign(tempFilePaths[0]); } }) } ``` 这里利用了微信内置API `wx.chooseImage()` 来获取用户的相册选取结果,并调用`pushOrign()`方法将选中的图片路径传递给`we-cropper`进行预览[^4]。 #### 获取裁剪后的结果 当完调整后想要保存最终效果图时,则需执行如下动作以导出已编辑好的圆形头像数据URL: ```javascript getCroppedImgDataUrl(callback){ this.cropper.getCropData((data)=>{ callback(data); }); } ``` 此函数接收一个回调作为参数,在内部调用了`getCropData()`从而获得经过裁剪处理之后的新图的数据链接形式返回给外部调用者进一步处理或存储。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值