在我的iPhone应用程序中,我需要让用户通过给定的动态生成的UIImage裁剪用户提供的CGPath

给定(闭合)CGPath之外的所有内容均应剪裁掉,并且应使用路径的边界矩形修剪所得图像。

图像应剪裁成柔和的边框。也就是说,剪切路径边缘的alpha通道中应该有一个从透明像素到不透明像素的柔和渐变。

有没有可用的解决方案来达到上述效果?

主要问题是如何获得该软梯度。我曾想过将我的CGPath光栅化到蒙版并在光栅化后对其进行模糊处理,但是我在iPhone API中未发现任何有关模糊化的内容……

关于裁剪,我计划使用CGPathGetBoundingBox数据,但重新阅读文档后会告诉我,生成的边界框将包含Bézier和二次曲线的控制点,这对我来说是不可接受的。好吧,对旧的非零alpha像素图像进行良好的扫描应该可以代替。

最佳答案

对于边界框,使用CGPathGetPathBoundingBox,其中不包括控制点。

您将在CoreImage中找到过滤(如模糊)。

基本CoreImage过滤器用法(来自https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-TPXREF101

CIContext *context = [CIContext contextWithOptions:nil];
CIImage *image = [CIImage imageWithContentsOfURL:myURL];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setValue:image forKey:kCIInputImageKey];
[filter setValue:@0.8f forKey:kCIInputIntensityKey];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGRect extent = [result extent];
CGImageRef cgImage = [context createCGImage:result fromRect:extent];


筛选条件:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/uid/TP40004346

07-26 09:37