Swift 中的自定义裁剪图像
Custom crop image in Swift
我已经创建了一个用户可以拍照的应用程序,我想添加一个自定义裁剪功能,其工作方式类似于 Snapchats 或 PhotoShops 魔术棒工具。我从 Apple Developer Website 找到了下面的代码,它允许我拍摄捕获的图像并将其裁剪成 CGRect
.
func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage?
{
let imageViewScale = max(inputImage.size.width / viewWidth,
inputImage.size.height / viewHeight)
// Scale cropRect to handle images larger than shown-on-screen size
let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
y:cropRect.origin.y * imageViewScale,
width:cropRect.size.width * imageViewScale,
height:cropRect.size.height * imageViewScale)
// Perform cropping in Core Graphics
guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
else {
return nil
}
// Return image to UIImage
let croppedImage: UIImage = UIImage(cgImage: cutImageRef)
return croppedImage
}
如何不使用 GCRect
在图像中绘制对象并将其用作 cropZone
?任何帮助将不胜感激。
你问的是一个相当复杂的任务,超出了 SO 问题的范围。我可以给你一个你需要做什么的大纲:
实现一种绘图方法,让用户可以在图像之上绘图并根据该绘图创建一个封闭的CGPath/UIBezierPath
将该路径安装到图像视图的图层蒙版中 属性。这会将图像的一部分隐藏在外面
找到用户绘制的形状的边界矩形,然后像上面那样裁剪到它。
我已经创建了一个用户可以拍照的应用程序,我想添加一个自定义裁剪功能,其工作方式类似于 Snapchats 或 PhotoShops 魔术棒工具。我从 Apple Developer Website 找到了下面的代码,它允许我拍摄捕获的图像并将其裁剪成 CGRect
.
func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage?
{
let imageViewScale = max(inputImage.size.width / viewWidth,
inputImage.size.height / viewHeight)
// Scale cropRect to handle images larger than shown-on-screen size
let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
y:cropRect.origin.y * imageViewScale,
width:cropRect.size.width * imageViewScale,
height:cropRect.size.height * imageViewScale)
// Perform cropping in Core Graphics
guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
else {
return nil
}
// Return image to UIImage
let croppedImage: UIImage = UIImage(cgImage: cutImageRef)
return croppedImage
}
如何不使用 GCRect
在图像中绘制对象并将其用作 cropZone
?任何帮助将不胜感激。
你问的是一个相当复杂的任务,超出了 SO 问题的范围。我可以给你一个你需要做什么的大纲:
实现一种绘图方法,让用户可以在图像之上绘图并根据该绘图创建一个封闭的CGPath/UIBezierPath
将该路径安装到图像视图的图层蒙版中 属性。这会将图像的一部分隐藏在外面
找到用户绘制的形状的边界矩形,然后像上面那样裁剪到它。