在我的iPhone应用程序中,我有一张黑白的
UIImage
图片。我需要模糊这张图片(高斯模糊可以)。 iPhone显然知道如何模糊图像,因为它在绘制阴影时会这样做。然而,在API中我没有找到任何相关的内容。我是否需要手动进行模糊处理,而没有硬件加速?UIImage
图片。我需要模糊这张图片(高斯模糊可以)。 iPhone显然知道如何模糊图像,因为它在绘制阴影时会这样做。然而,在API中我没有找到任何相关的内容。我是否需要手动进行模糊处理,而没有硬件加速?尝试这个(在这里找到):
@interface UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur;
@end
@implementation UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur {
float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162};
// Blur horizontally
UIGraphicsBeginImageContext(self.size);
[self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
for (int x = 1; x < 5; ++x) {
[self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
[self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
}
UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Blur vertically
UIGraphicsBeginImageContext(self.size);
[horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
for (int y = 1; y < 5; ++y) {
[horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
[horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
}
UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//
return blurredImage;
}
然后像这样使用它:
UIImage *blurredImage = [originalImage imageWithGaussianBlur];
如果想要更强的模糊效果,只需多次应用此效果即可 :)
如果您遇到类似的问题,可以尝试使用这个库进行检查:
https://github.com/tomsoft1/StackBluriOS
非常容易使用:
UIImage *newIma=[oldIma stackBlur:radius];
基本上没有一个直接的API来实现模糊效果。您需要处理像素才能完成这个过程。
iPhone通过渐变而不是模糊来绘制阴影。