裁剪CIImage

我有一个类需要一个UIImage ,像这样初始化一个CIImage

 workingImage = CIImage.init(image: baseImage!) 

然后,图像被用来从中切出9个相邻的正方形,在一个循环中:

 for x in 0..<3 { for y in 0..<3 { croppingRect = CGRect(x: CGFloat(Double(x) * sideLength + startPointX), y: CGFloat(Double(y) * sideLength + startPointY), width: CGFloat(sideLength), height: CGFloat(sideLength)) let tmpImg = (workingImage?.cropping(to: croppingRect))! } } 

这些tmpImgs被插入到一个表中,以后使用,但除此之外,

此代码适用于IOS 9IOS 10模拟器,但不适用于实际的IOS 10设备 。 生成的图像要么全是空的,要么其中一个就像它应该是的一半,剩下的就是空的。

这不是它应该如何在IOS 10完成吗?

问题的核心在于,通过CIImage不是裁剪UIImage的方式。 首先,从CIImage返回到UIImage是一件复杂的事情。 另一方面,整个往返是不必要的。

如何裁剪

为了裁剪图像,制作所需裁剪尺寸的图像graphics上下文,并在UIImage上调用draw(at:)以在相对于graphics上下文的期望点处绘制图像,以使图像的期望部分落入上下文。 现在提取产生的新图像并closures上下文。

为了示范,我会把你尝试的三分之一,即右下三分之一:

 let sz = baseImage.size UIGraphicsBeginImageContextWithOptions( CGSize(width:sz.width/3.0, height:sz.height/3.0), false, 0) baseImage.draw(at:CGPoint(x: -sz.width/3.0*2.0, y: -sz.height/3.0*2.0)) let tmpImg = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() 

原始图像( baseImage ):

在这里输入图像说明

裁剪图像( tmpImg ):

在这里输入图像说明

其他部分是完全平行的。