3

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

所有在给定(封闭)之外的CGPath东西都应该被剪掉,并且结果图像应该被路径的边界矩形修剪。

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

是否有任何可用的解决方案来实现所描述的效果?

主要问题是如何获得那种柔和的渐变。我想过将我CGPath的蒙版光栅化并在光栅化后将其模糊,但我在 iPhone API 中没有发现任何关于模糊的信息……

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

4

1 回答 1

0

对于边界框,使用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

于 2015-08-10T14:56:56.127 回答