使用@shopify/reactnative-skia裁剪路径区域图像异常求助
修复@shopify/react-native-skia路径区域裁剪问题
你的代码里没有对画布设置路径裁剪规则,只是单纯截取了路径对应的矩形区域,自然得不到路径形状的裁剪图像。要实现路径区域裁剪,需要按正确的Skia画布操作流程来:
修正后的完整代码
const surface = Skia.Surface.MakeOffscreen( canvasSize.width, canvasSize.height ); const currentCanvas = surface?.getCanvas(); if (!currentCanvas) return; const bounds = path.getBounds(); const paint = Skia.Paint(); paint.setAntiAlias(true); // 建议开启抗锯齿,裁剪边缘更平滑 // 1. 保存当前画布状态,方便后续恢复 currentCanvas.save(); // 2. 设置路径为裁剪区域,后续绘制只会显示路径内的内容 currentCanvas.clipPath(path); // 3. 在裁剪区域内绘制图像 currentCanvas.drawImageRect( image, Skia.XYWHRect(0, 0, image.width(), image.height()), Skia.XYWHRect(0, 0, canvasSize.width, canvasSize.height), paint ); // 4. 截取路径对应的矩形区域(此时区域内只有路径覆盖的图像部分) const clipImage = surface.makeImageSnapshot(bounds); // 5. 恢复画布状态,避免影响后续操作 currentCanvas.restore();
关键修改说明
- 调整操作顺序:Skia的裁剪规则只对调用后的绘制操作生效,因此必须先设置裁剪路径,再绘制图像
- 开启抗锯齿:可选但推荐,能让裁剪边缘更平滑,避免锯齿感
- 增加空值判断:提升代码健壮性,防止画布实例为空时出错
- 恢复画布状态:调用
restore()清除当前裁剪规则,避免影响后续画布操作
基础图像

预期裁剪效果

内容的提问来源于stack exchange,提问作者Rameez Raja
相关产品推荐
相关产品推荐

