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

iPhone:通过给定的CGPath剪辑用户提供的UIImage,iphone,image-manipulation,quartz-2d,Iphone,Image Manipulation,Quartz 2d,在我的iPhone应用程序中,我需要让用户通过给定的动态生成的CGPath剪辑用户提供的UIImage 所有在给定(闭合)CGPath之外的内容都应该被裁剪掉,生成的图像应该被路径的边框修剪掉 图像应该用软边框剪裁。也就是说,在剪切路径边缘的alpha通道中应该有一个从透明到不透明像素的软渐变 是否有任何可用的解决方案来实现所述效果 主要问题是如何获得软梯度。我曾想过将我的CGPath光栅化到掩码上,并在光栅化后使其模糊,但我在iPhone API中没有发现任何关于模糊的内容 至于剪裁,我计划使

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

所有在给定(闭合)
CGPath
之外的内容都应该被裁剪掉,生成的图像应该被路径的边框修剪掉

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

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

主要问题是如何获得软梯度。我曾想过将我的
CGPath
光栅化到掩码上,并在光栅化后使其模糊,但我在iPhone API中没有发现任何关于模糊的内容


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

对于边界框,使用
CGPathGetPathBoundingBox
,它不包括控制点

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

CoreImage过滤器的基本用法(来自)

过滤器:


如果你需要一个软渐变,你也需要一个图像遮罩。给定的路径是固定的还是动态生成的?给定的路径是动态生成的。我更新了答案。呃,我的意思是,当然更新了问题:-)
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];