[绍棠] 高斯模糊效果汇总
2017-02-15 11:50
417 查看
一. iOS7之前
创建一个UIToolbar实例,设置它的frame或者也可以通过添加约束
然后UIToolbar有一个属性:barStyle,设置对应的枚举值来呈现毛玻璃的样式,最后再添加到需要进行毛玻璃效果的view上即可.
?
![](https://img-blog.csdn.net/20170215114516495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlzaGFvdGFuZzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二. iOS8
实例化UIBlurEffect并设置毛玻璃的样式,然后再通过UIVisualEffectView的构造方法将UIBlurEffect的实例添加上去最后设置frame或者是通过添加约束, 将effectView添加到要实现了毛玻璃的效果的view控件上,效果图和上面的一样.
?
![](https://img-blog.csdn.net/20170215114704865?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFwcHlzaGFvdGFuZzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三. 导入
#import <Accelerate/Accelerate.h>
+(UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur
{
if (blur <0.f || blur >1.f) {
blur = 0.5f;
}
int boxSize = (int)(blur *40);
boxSize = boxSize - (boxSize % 2) +1;
CGImageRef img = image.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;
//从CGImage中获取数据
CGDataProviderRef inProvider =CGImageGetDataProvider(img);
CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);
//设置从CGImage获取对象的属性
inBuffer.width =CGImageGetWidth(img);
inBuffer.height =CGImageGetHeight(img);
inBuffer.rowBytes =CGImageGetBytesPerRow(img);
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
pixelBuffer = malloc(CGImageGetBytesPerRow(img) *
CGImageGetHeight(img));
if(pixelBuffer ==NULL)
NSLog(@"No pixelbuffer");
outBuffer.data = pixelBuffer;
outBuffer.width =CGImageGetWidth(img);
outBuffer.height =CGImageGetHeight(img);
outBuffer.rowBytes =CGImageGetBytesPerRow(img);
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0,
boxSize, boxSize,NULL,
kvImageEdgeExtend);
if (error) {
NSLog(@"error from convolution %ld", error);
}
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef ctx =CGBitmapContextCreate(
outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
kCGImageAlphaNoneSkipLast);
CGImageRef imageRef =CGBitmapContextCreateImage (ctx);
UIImage *returnImage = [UIImageimageWithCGImage:imageRef];
//clean up
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
CFRelease(inBitmapData);
CGColorSpaceRelease(colorSpace);
CGImageRelease(imageRef);
return returnImage;
}
调用
self.imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(0,300,SCREENWIDTH,100)];
self.imageView.contentMode=UIViewContentModeScaleAspectFill;
self.imageView.image=[UIImageboxblurImage:[UIImageimageNamed:@"Person"]withBlurNumber:0.5];
self.imageView.clipsToBounds=YES;
[self.viewaddSubview:self.imageView]
github地址: https://github.com/happycoco/UIimageBlur
创建一个UIToolbar实例,设置它的frame或者也可以通过添加约束
然后UIToolbar有一个属性:barStyle,设置对应的枚举值来呈现毛玻璃的样式,最后再添加到需要进行毛玻璃效果的view上即可.
?
二. iOS8
实例化UIBlurEffect并设置毛玻璃的样式,然后再通过UIVisualEffectView的构造方法将UIBlurEffect的实例添加上去最后设置frame或者是通过添加约束, 将effectView添加到要实现了毛玻璃的效果的view控件上,效果图和上面的一样.
?
三. 导入
#import <Accelerate/Accelerate.h>
+(UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur
{
if (blur <0.f || blur >1.f) {
blur = 0.5f;
}
int boxSize = (int)(blur *40);
boxSize = boxSize - (boxSize % 2) +1;
CGImageRef img = image.CGImage;
vImage_Buffer inBuffer, outBuffer;
vImage_Error error;
void *pixelBuffer;
//从CGImage中获取数据
CGDataProviderRef inProvider =CGImageGetDataProvider(img);
CFDataRef inBitmapData =CGDataProviderCopyData(inProvider);
//设置从CGImage获取对象的属性
inBuffer.width =CGImageGetWidth(img);
inBuffer.height =CGImageGetHeight(img);
inBuffer.rowBytes =CGImageGetBytesPerRow(img);
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
pixelBuffer = malloc(CGImageGetBytesPerRow(img) *
CGImageGetHeight(img));
if(pixelBuffer ==NULL)
NSLog(@"No pixelbuffer");
outBuffer.data = pixelBuffer;
outBuffer.width =CGImageGetWidth(img);
outBuffer.height =CGImageGetHeight(img);
outBuffer.rowBytes =CGImageGetBytesPerRow(img);
error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0,0,
boxSize, boxSize,NULL,
kvImageEdgeExtend);
if (error) {
NSLog(@"error from convolution %ld", error);
}
CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();
CGContextRef ctx =CGBitmapContextCreate(
outBuffer.data,
outBuffer.width,
outBuffer.height,
8,
outBuffer.rowBytes,
colorSpace,
kCGImageAlphaNoneSkipLast);
CGImageRef imageRef =CGBitmapContextCreateImage (ctx);
UIImage *returnImage = [UIImageimageWithCGImage:imageRef];
//clean up
CGContextRelease(ctx);
CGColorSpaceRelease(colorSpace);
free(pixelBuffer);
CFRelease(inBitmapData);
CGColorSpaceRelease(colorSpace);
CGImageRelease(imageRef);
return returnImage;
}
调用
self.imageView=[[UIImageViewalloc]initWithFrame:CGRectMake(0,300,SCREENWIDTH,100)];
self.imageView.contentMode=UIViewContentModeScaleAspectFill;
self.imageView.image=[UIImageboxblurImage:[UIImageimageNamed:@"Person"]withBlurNumber:0.5];
self.imageView.clipsToBounds=YES;
[self.viewaddSubview:self.imageView]
github地址: https://github.com/happycoco/UIimageBlur
相关文章推荐
- 高斯模糊效果移植到android系统
- 高斯模糊效果实现方案及性能对比
- backdrop-filter 和filter 写出高斯模糊效果 以及两者区别
- 高斯模糊效果及截屏
- 高斯模糊效果的简单实现
- iOS实现背景高斯模糊效果
- iOS 高斯模糊 效果
- Android实用技巧.高斯模糊毛玻璃背景效果
- 高斯模糊滤镜效果解析
- Android 高斯模糊效果从319ms到3ms的优化实现
- Android 实现高斯模糊效果且兼容低版本
- 截屏 高斯模糊效果
- iOS 毛玻璃效果和高斯图片模糊实现
- iOS 各种demo链接汇总~模糊效果
- 高斯模糊效果实现方案及性能对比
- 高斯模糊效果实现方案及性能对比
- 高斯模糊效果的简单实现
- Android 高斯模糊效果
- Android 高斯模糊效果从319ms到3ms的优化实现
- 【iOS】iOS下高斯模糊效果的实现