You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:55:17