我试图对一张UIImage进行高斯模糊,以达到与我的Photoshop模型设计相同的效果。
期望行为: 在Photoshop中,当我执行高斯模糊滤镜时,图像层由于模糊边缘而变大。
实际行为: 使用GPUImage,我成功地使我的UIImage变模糊。然而,新图像被裁剪在原始边界处,周围留下了一个硬边缘。将
我还尝试在模糊之前将UIImage置于更大的透明图片的中心,然后再调整大小,但这也没有帮助。
有没有办法实现这种“Photoshop风格”的模糊效果?
更新的有效方法如下:感谢Brad Larson。
期望行为: 在Photoshop中,当我执行高斯模糊滤镜时,图像层由于模糊边缘而变大。
实际行为: 使用GPUImage,我成功地使我的UIImage变模糊。然而,新图像被裁剪在原始边界处,周围留下了一个硬边缘。将
UIImageView.layer.masksToBounds = NO;
设为false并不能解决问题,因为图片被裁剪的是图片而不是视图。我还尝试在模糊之前将UIImage置于更大的透明图片的中心,然后再调整大小,但这也没有帮助。
有没有办法实现这种“Photoshop风格”的模糊效果?
更新的有效方法如下:感谢Brad Larson。
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];