iOS 图片模糊处理和自动获取图片尺寸
来源:互联网 发布:linux系统密码破解 编辑:程序博客网 时间:2024/05/02 04:50
1.图片模糊处理:
方法一:
+ (UIImage *)coreBlurImage:(UIImage *)image withBlurNumber:(CGFloat)blur { CIContext *context = [CIContext contextWithOptions:nil]; CIImage *inputImage=[CIImage imageWithCGImage:image.CGImage]; CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; [filter setValue:inputImage forKey:kCIInputImageKey]; [filter setValue:@(blur) forKey: @"inputRadius"]; //模糊图片 CIImage *result=[filter valueForKey:kCIOutputImageKey]; CGImageRef outImage=[context createCGImage:result fromRect:[result extent]]; UIImage *blurImage=[UIImage imageWithCGImage:outImage]; CGImageRelease(outImage); return blurImage;}
这是在网上所出来最多的一个方法,但是在使用的时候发现非常消耗性能,会阻塞主线程,效果很差。
方法二:
+ (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 = [UIImage imageWithCGImage:imageRef]; //释放C对象 CGContextRelease(ctx); CGColorSpaceRelease(colorSpace); free(pixelBuffer); CFRelease(inBitmapData); CGImageRelease(imageRef); return returnImage;}这个方法在性能上就好了很多,非常流程
2.自动获取图片尺寸
方法一:
-(void)test1{ UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Irelia_0.jpg"]]; [imageView sizeToFit]; NSLog(@"%@", NSStringFromCGRect(imageView.frame));}这个方法主要是通过sizeToFit获取imageView的尺寸
方法二:
-(void)test2{ UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Irelia_0.jpg"]]; CGImageRef img = imageView.image.CGImage; CGFloat imageWidth = (CGFloat)CGImageGetWidth(img); CGFloat imageHeight = (CGFloat)CGImageGetHeight(img); NSLog(@"imageWidth:%f====imageHeight:%f", imageWidth, imageHeight);}这个方法主要是通过CGImageGetWidth和CGImageGetHeight来获取image的尺寸
0 0
- iOS 图片模糊处理和自动获取图片尺寸
- iOS 通过图片文件头,获取图片类型,以及图片尺寸
- 根据图片url获取图片尺寸
- 下载图片先获取图片尺寸
- 根据图片url获取图片尺寸
- 根据图片url获取图片尺寸
- ios 相册获取图片模糊解决办法
- iOS处理图片的各种模糊效果
- 根据Url 获取图片尺寸 iOS
- 根据Url 获取图片尺寸 iOS
- iOS-92-获取网络图片尺寸
- iOS 图片大小压缩 图片尺寸处理
- Android RadioButton图片和图片尺寸
- ImageReader和BufferedImage获取图片尺寸
- IOS根据一张图片获取它的模糊效果图片
- ios 图片尺寸设计和原理
- javascript图片预加载快速获取图片尺寸
- javascript图片预加载快速获取图片尺寸
- reactor/proactor模型简介
- Netty的Reactor线程模型
- 【BZOJ 2844】 albus就是要第一个出场|线性基
- 华为招聘练习--小明的筷子
- Reactor模型 三种模型 演变
- iOS 图片模糊处理和自动获取图片尺寸
- Rxjava原理探索:切换线程,变换
- 多线程处理的几种模式—Proactor和Reactor
- 一行命令获取当前JVM所有可设置的参数以及当前默认值
- 垃圾收集器Serial 、Parallel、CMS、G1
- 做一个合格的程序猿之浅析Spring AOP源码(十七) Spring AOP开发大作战
- iOS开发 ☞ UITableView详解(一)
- JVM垃圾回收算法 总结及汇总
- 【原创】k8s源码分析----apiserver之APIGroupVersion