高斯模糊的白边问题
以下是我写高斯模糊的代码
- (UIImage *)blureImage:(UIImage *)originImage withInputRadius:(CGFloat)inputRadius
{
CIContext *context = [CIContext contextWithOptions:nil];
CIImage *image = [CIImage imageWithCGImage:originImage.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
[filter setValue:image forKey:kCIInputImageKey];
[filter setValue:@(inputRadius) forKey: @"inputRadius"];
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CGImageRef outImage = [context createCGImage: result fromRect:[result extent]];
UIImage * blurImage = [UIImage imageWithCGImage:outImage];
return blurImage;
}
如图所示,图片周围会有一圈虚化的白边,这是高斯模糊的正常效果吗,我该如何去掉这个白边?
原图在这里
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
前几天我也遇过这个问题,你试一下改变fromRect...
CGRect extent = CGRectInset(filter.outputImage.extent, insert, insert);
CGImageRef outImage = [context createCGImage:outputImage fromRect:extent];
CGImageRef outImage = [context createCGImage: result fromRect:[result extent]];
改为 CGImageRef outImage = [context createCGImage: result fromRect:[image extent]];
image 为上边的 CIImage *image = [CIImage imageWithCGImage:originImage.CGImage];
高斯模糊我记得没错的话无非就是每一个pixel的RGB都是周围pixel的RGB的平均值.
所以我推测,你的原图是不是有白边?
你是不是高斯模糊的同时,把图片缩小了
高斯模糊在边界上确实有点问题。。
有个比较好的思路:将图片的第一行复制若干份放到图片上方(或者向上拉长第一行),其余边类似处理,高斯模糊之后再将图片裁剪回原大小。