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

Swift中如何通过UIBezierPath裁剪图片?路径裁剪失效求助

问题分析与修复方案

你的代码存在几个关键问题导致路径区域裁剪失效:

  1. 使用默认绘图上下文不支持透明效果,清除区域后无法呈现预期的透明裁剪结果
  2. clear方法的高度参数写错(误用width代替height)
  3. 裁剪逻辑错误:clip是限制后续绘制的范围,当前写法会清除裁剪区域内所有内容,和你“移除路径覆盖区域”的需求不符

修复后的代码

guard let originalImage = treaCameraImage else { return }

// 创建支持透明和Retina适配的绘图上下文
UIGraphicsBeginImageContextWithOptions(originalImage.size, false, 0)
defer { UIGraphicsEndImageContext() } // 确保上下文被正确销毁

originalImage.draw(at: .zero)

if let context = UIGraphicsGetCurrentContext() {
    // 设置混合模式为清除,填充路径时会直接清除对应区域像素
    context.setBlendMode(.clear)
    // 填充路径,实现移除路径覆盖区域的效果
    path.fill()
}

let newImage = UIGraphicsGetImageFromCurrentImageContext()
imageCut.image = newImage

关键改动说明

  • 改用UIGraphicsBeginImageContextWithOptions创建上下文:第二个参数传false开启透明通道,第三个参数传0自动适配屏幕缩放比例
  • 使用.clear混合模式:填充路径时直接清除路径覆盖的像素,精准实现“移除路径区域”的需求
  • 移除冗余的clip和clear操作,简化逻辑同时解决核心问题

内容的提问来源于stack exchange,提问作者mariovzc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:06:29