9

在我的 iPhone 应用程序中,我有一个黑白UIImage. 我需要模糊该图像(高斯模糊可以)。

iPhone 清楚地知道如何模糊图像,就像它在绘制阴影时那样

但是我没有在 API 中找到任何相关的内容。

我是否必须在没有硬件加速的情况下手动进行模糊?

4

5 回答 5

15

试试这个(在这里找到):

@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];

要获得更强的模糊效果,只需应用此效果两次或更多次 :)

于 2012-02-05T10:10:00.817 回答
6

在过去遇到同样的问题后,检查这个库:

https://github.com/tomsoft1/StackBluriOS

也很容易使用:

UIImage *newIma=[oldIma stackBlur:radius];
于 2012-02-07T09:43:18.783 回答
2

考虑通过 CIFilter 处理工作:

为 iOS 开发核心图像过滤器

于 2015-03-26T09:32:38.783 回答
0

要模糊图像,您将使用卷积矩阵。这是应用卷积矩阵的示例代码,这里是卷积矩阵的概述以及一些示例矩阵(包括模糊和高斯模糊)。

于 2011-11-23T00:11:56.227 回答
0

基本上没有直接的 API 来实现模糊效果。您需要处理像素以完成此操作。

iPhone 通过渐变而不是通过模糊来绘制阴影。

于 2010-11-20T13:06:39.643 回答