如何获取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
相关产品推荐
相关产品推荐

