模糊界限之外的UIImage(Photoshop风格)

我正在尝试在复制我的photoshop模型的UIImage上做高斯模糊。

期望的行为:在Photoshop中,当我运行高斯模糊滤镜时,由于边缘模糊,图像层变大。

观察到的行为:使用GPUImage,我可以成功地模糊我的UIImages。 然而,新的形象是在原始的边界裁剪,留下一个硬边缘。

设置UIImageView.layer.masksToBounds = NO; 没有帮助,因为图像被裁剪而不是视图。

我也尝试将UIImage放在较大的清晰图像上,然后resize。 这也没有帮助。

有没有办法实现这种“Photoshop风格”模糊?

在这里输入图像说明

感谢Brad Larson 更新工作解决scheme

 UIImage sourceImage = ... GPUImagePicture *imageSource = [[GPUImagePicture alloc] initWithImage:sourceImage]; GPUImageTransformFilter *transformFilter = [GPUImageTransformFilter new]; GPUImageFastBlurFilter *blurFilter = [GPUImageFastBlurFilter new]; //Force processing at scale factor 1.4 and affine scale with scale factor 1 / 1.4 = 0.7 [transformFilter forceProcessingAtSize:CGSizeMake(SOURCE_WIDTH * 1.4, SOURCE_WIDTH * 1.4)]; [transformFilter setAffineTransform:CGAffineTransformMakeScale(0.7, 0.7)]; //Setup desired blur filter [blurFilter setBlurSize:3.0f]; [blurFilter setBlurPasses:20]; //Chain Image->Transform->Blur->Output [imageSource addTarget:transformFilter]; [transformFilter addTarget:blurFilter]; [imageSource processImage]; UIImage *blurredImage = [blurFilter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp]; 

GPUImage只会产生一个处理到图像极限的结果。 为了扩展您的图片,您需要展开它所在的canvas。

为此,您需要将图像提供给GPUImageTransformFilter,然后使用-forceProcessingAtSize:-forceProcessingAtSizeRespectingAspectRatio:放大工作区域。 但是,这也会在默认情况下放大图像,因此为了对抗这个问题,请使用GPUImageTransformFilter的缩放比例来缩小图像相对于较大区域的大小。 这将保持相同的像素尺寸,同时将其放置在更大的整体图像中。

然后,所有您需要做的就是将此输出提供给您的模糊滤镜,模糊现在将延伸到原始图像的边缘。 强制图像的大小将取决于模糊需要延伸到原始图像边缘的距离。

尝试调整UIImageView的边界来调整模糊。 一个视图将会限制界限以外的内容。 请注意,在您的示例中,Photoshop中模糊的框看起来比原始图像大20%左右。

 UIImageView *image; image.layer.bounds = CGRectMake(0, 0, image.layer.bounds.size.width + 5, image.layer.bounds.size.height + 5);