iPhone:由给定的CGPath剪辑用户提供的UIImage

时间:2009-08-30 22:53:09

标签: iphone image-manipulation quartz-2d

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

应该删除给定(关闭)CGPath之外的所有内容,并且应该通过路径的边界矩形修剪生成的图像。

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

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

主要问题是如何获得软渐变。我想过将CGPath光栅化到面具上并在光栅化后模糊它,但我没有发现任何关于iPhone API模糊的内容......

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

1 个答案:

答案 0 :(得分: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