Verwischen Sie UIImage außerhalb der Grenzen (im Photoshop-Stil)

Ich versuche, auf einem UIImage eine Gaußsche Unschärfe zu erzeugen, die mein Photoshop-Modell reproduziert.

Gewünschtes Verhalten: Wenn ich in Photoshop einen Gaußschen Unschärfefilter ausführe, wird die Bildebene aufgrund der unscharfen Kanten größer.

Beobachtetes Verhalten: Mit GPUImage kann ich meine UII-Bilder erfolgreich verwischen. Das neue Bild wird jedoch an den ursprünglichen Grenzen beschnitten, sodass ringsum eine harte Kante verbleibt.

RahmenUIImageView.layer.masksToBounds = NO; hilft nicht, da das Bild nicht die Ansicht beschnitten wird.

Ich habe auch versucht, das UIImage vor dem Weichzeichnen auf ein größeres, klares Bild zu zentrieren und dann die Größe zu ändern. Das hat auch nicht geholfen.

Gibt es eine Möglichkeit, diese "Photoshop-ähnliche" Unschärfe zu erzielen?

UPDATE Arbeitslösung Dank an 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];

Antworten auf die Frage(2)

Ihre Antwort auf die Frage