iPhone:模糊UIImage

9
在我的iPhone应用程序中,我有一张黑白的UIImage图片。我需要模糊这张图片(高斯模糊可以)。 iPhone显然知道如何模糊图像,因为它在绘制阴影时会这样做。然而,在API中我没有找到任何相关的内容。我是否需要手动进行模糊处理,而没有硬件加速?
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];

如果想要更强的模糊效果,只需多次应用此效果即可 :)


6

2

0

基本上没有一个直接的API来实现模糊效果。您需要处理像素才能完成这个过程。

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


0

要模糊一张图片,你可以使用卷积矩阵。这里是应用卷积矩阵的样例代码,以及一个卷积矩阵概述和一些示例矩阵(包括模糊和高斯模糊)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接