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

如何获取UIImagePickerController的cropRect(裁剪矩形)?

在UIImagePickerController图像区域绘制内容:获取cropRect的方法

cropRect仅在图像选择器开启编辑模式时才会返回,所以第一步必须开启编辑权限:

1. 启用图像选择器的编辑模式

初始化UIImagePickerController时设置allowsEditing = true:

let imagePicker = UIImagePickerController()
imagePicker.sourceType = .photoLibrary // 可替换为.camera
imagePicker.allowsEditing = true // 关键:开启编辑才能拿到cropRect
imagePicker.delegate = self
present(imagePicker, animated: true)

2. 在代理方法中提取cropRect

实现UIImagePickerControllerDelegate的回调方法,从info字典中获取cropRect:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    picker.dismiss(animated: true)
    
    // 从info字典中取出cropRect,类型为CGRect
    guard let cropRect = info[.cropRect] as? CGRect else {
        // 未开启编辑或获取失败,直接返回
        return
    }
    
    // 获取原始图像(用于后续绘制操作)
    guard let originalImage = info[.originalImage] as? UIImage else {
        return
    }
    
    // 示例:在图像的裁剪区域绘制红色边框
    UIGraphicsBeginImageContextWithOptions(originalImage.size, false, originalImage.scale)
    originalImage.draw(at: .zero)
    
    let context = UIGraphicsGetCurrentContext()
    context?.setStrokeColor(UIColor.red.cgColor)
    context?.setLineWidth(4)
    context?.stroke(cropRect)
    
    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    // 后续使用resultImage,比如显示到视图
    // yourImageView.image = resultImage
}

关键说明

  • cropRect的坐标系是原始图像的坐标系,不是屏幕坐标系,直接用它在图像绘图上下文里操作就能精准对应图像上的裁剪区域。
  • 如果使用相机模式,同样需要开启allowsEditing才能获取到cropRect。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:22:33