CGContextClipToMask未在iOS中剪切图像

CGContextClipToMask未在iOS中剪切图像,ios,swift,uigraphicscontext,Ios,Swift,Uigraphicscontext,我正在尝试将UIImage保存到照片库,并使用以下方法执行此操作: func savePhoto() { UIGraphicsBeginImageContextWithOptions(CGSize(width: device.x, height: device.y), false, 2.0) CGContextClipToRect(UIGraphicsGetCurrentContext(), self.drawingCanvas) self.mainImageView.i

我正在尝试将
UIImage
保存到照片库,并使用以下方法执行此操作:

func savePhoto() {
    UIGraphicsBeginImageContextWithOptions(CGSize(width: device.x, height: device.y), false, 2.0)
    CGContextClipToRect(UIGraphicsGetCurrentContext(), self.drawingCanvas)
    self.mainImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: device.x, height: device.y), blendMode: CGBlendMode.Normal, alpha: 1.0)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
}
图像成功保存,但问题是图像没有裁剪到
cgrit drawingCanvas
的大小,但导出的图像是相应屏幕的大小

由于
drawingCanvas
的大小仅为屏幕的2/3左右,因此最终图像中会留下一个较大的空白白色区域

另外,如果我打印
cgcontextgetclipboondingbox(UIGraphicsGetCurrentContext())
它会打印正确的大小,这与
drawingCanvas
相同


有人知道为什么最终图像没有被剪裁吗?

CoreGraphics正是按照它应该的方式剪裁的。“Clip”表示“对于后续的绘图调用,只在我提供的rect内绘图,而不在其外绘图”。这就是为什么在你看到的图像外有白色区域

剪裁不会使上下文变小,也不会使结果图像变小。剪裁与裁剪不同

如果希望结果图像更小,则应更改传递给
UIGraphicsBeginImageContextWithOptions
的大小。它不必基于任何特定的设备

你的问题不清楚你到底想要什么尺寸。但是,如果希望它基于绘图画布的大小,请改用它:

UIGraphicsBeginImageContextWithOptions(self.drawingCanvas, false, 2.0)
self.mainImageView.image?.drawInRect(CGRect(origin: CGPoint.zero, size:self.drawingCanvas))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

CoreGraphics正按照它应该的方式进行剪裁。“Clip”表示“对于后续的绘图调用,只在我提供的rect内绘图,而不在其外绘图”。这就是为什么在你看到的图像外有白色区域

剪裁不会使上下文变小,也不会使结果图像变小。剪裁与裁剪不同

如果希望结果图像更小,则应更改传递给
UIGraphicsBeginImageContextWithOptions
的大小。它不必基于任何特定的设备

你的问题不清楚你到底想要什么尺寸。但是,如果希望它基于绘图画布的大小,请改用它:

UIGraphicsBeginImageContextWithOptions(self.drawingCanvas, false, 2.0)
self.mainImageView.image?.drawInRect(CGRect(origin: CGPoint.zero, size:self.drawingCanvas))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

库尔特,谢谢你提供的详细信息。我当时的印象是剪辑意味着作物。通过这些信息,我已经解决了我的问题。库尔特,谢谢你提供的详细信息。我当时的印象是剪辑意味着作物。根据这些信息,我已经解决了我的问题。