有哪些可以将图片pr局部模糊糊化的 iOS 应用

//原始图片
UIImage*image = [UIImage imageNamed:@&sourceImage.jpg&];
/*.....coreImage部分....*/
//CIImage(图片输入源类似于UIImage)
CIImage *ciImage = [[CIImage alloc]initWithImage:image];
//CIFilter(滤镜)CIGaussianBlue是一款滤镜名字
CIFilter *blurFilter = [CIFilter filterWithName:@&CIGaussianBlur&];
//将图片输入到滤镜中
[blurFilter setValue:ciImage forKey:kCIInputImageKey];
//设置模糊长度(不模糊为0,模糊最大为100)
[blurFilter setValue:@(0) forKey:@&inputRadius&];
//将处理好的图片输出
CIImage *outCiImage = [blurFilter valueForKey:kCIOutputImageKey];
//输入该滤镜中所有可以设置的参数以及相关的信息
NSLog(@&%@&,[blurFilter attributes]);
//CIContext(CIImage的操作句柄)nil表示默认有CPU渲染图片(如果让GPU渲染提高效率,则应设置contextWithOptions的字典数据)
CIContext *context = [CIContext contextWithOptions:nil];
//获取CGImage句柄
CGImageRef outCGImage = [context createCGImage:outCiImage
fromRect:[outCiImage extent]];
//最终获取到图片
UIImage *blurImage = [UIImage imageWithCGImage:outCGImage];
//释放CGImage句柄
CGImageRelease(outCGImage);
/*.........................*/
//初始化ImageView
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10,10,300,300)];
imageView.backgroundColor = [UIColor redColor];
imageView.image = blurI
imageView.center = self.view.
[self.view addSubview:imageView];
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:57004次
积分:1241
积分:1241
排名:千里之外
原创:60篇
转载:30篇
(3)(13)(1)(7)(2)(7)(8)(22)(29)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'iOS 有哪些优秀的照片处理软件_百度知道
iOS 有哪些优秀的照片处理软件
我有更好的答案
照片的后期处理一般使用adobe的lightroom和apple的Aperture
VpnVip资讯教程,软件使用平台。
操作系统/系统故障
我推荐玩图,天天P图,照片工坊,in,SNOW和Faceu我推荐Picsart,PS Touch ,snapseed和MIX滤镜大师。你想要简单一点的,潮自拍,相机360 ,B612,图痒,美颜相机,鲜柚桌面,装B神器,pixlr
本回答被提问者采纳
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。推荐这篇日记的豆列
&&&&&&&&&&&&
&(4801人关注)
&(26639人关注)
&(13422人关注)
&(7106人关注)
&(31195人关注)iOS毛玻璃效果的实现及图片模糊效果的三种方法
图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享iOS毛玻璃效果的实现及图片模糊效果的三种方法的教程,热爱PS的朋友们快点看过来吧!
App设计时往往会用到一些模糊效果或者毛玻璃效果,iOS目前已提供一些模糊API可以让我们方便是使用。话说苹果在iOS7.0之后,很多系统界面都使用了毛玻璃效果,增加了界面的美观性,比如下图的通知中心界面;但是其iOS7.0的SDK并没有提供给开发者实现毛玻璃效果的API,所以很多人都是通过一些别人封装的框架来实现,后面我也会讲到一个;其实在iOS7.0(包括)之前还是有系统的类可以实现毛玻璃效果的, 就是 UIToolbar这个类,并且使用相当简单,几行代码就可以搞定.下面是代码实现:创建一个UIToolbar实例,设置它的frame或者也可以通过添加约束然后UIToolbar有一个属性:barStyle,设置对应的枚举值来呈现毛玻璃的样式,最后再添加到需要进行毛玻璃效果的view上即可./*毛玻璃的样式(枚举)UIBarStyleDefault = ,UIBarStyleBlack = ,UIBarStyleBlackOpaque = , // Deprecated. Use UIBarStyleBlackUIBarStyleBlackTranslucent = , // Deprecated. Use UIBarStyleBlack and set the translucent property to YES*/UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];bgImgView.image = [UIImage imageNamed:@"huoying.jpg"];[self.view addSubview:bgImgView];UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(, , bgImgView.frame.size.width*., bgImgView.frame.size.height)];toolbar.barStyle = UIBarStyleBlackT[bgImgView addSubview:toolbar]; 效果图:我们再来看看视图结构:通过视图结构可以看到UIToolbar包含了三个子视图一个背景图片和1个背景view,还有1个背景特效view,正是这几个视图结合在一起实现了毛玻璃的效果在iOS8.0之后,苹果新增了一个类UIVisualEffectView,通过这个类来实现毛玻璃效果与上面的UIToolbar一样,而且效率也非常之高,使用也是非常简单,几行代码搞定. UIVisualEffectView是一个抽象类,不能直接使用,需通过它下面的三个子类来实现(UIBlurEffect, UIVisualEffevt, UIVisualEffectView);子类UIBlurEffect只有一个类方法,用来快速创建一个毛玻璃效果,参数是一个枚举,用来设置毛玻璃的样式,而UIVisualEffectView则多了两个属性和两个构造方法,用来快速将创建的毛玻璃添加到这个UIVisualEffectView上.特别注意: 这个类是iOS8.0之后才适用, 所以如果项目要兼容iOS7.0的话, 还是要考虑其它的两种方法了.下面来看看实现代码:同样是先快速的实例化UIBlurEffect并设置毛玻璃的样式,然后再通过UIVisualEffectView的构造方法将UIBlurEffect的实例添加上去最后设置frame或者是通过添加约束, 将effectView添加到要实现了毛玻璃的效果的view控件上,效果图和上面的一样.UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];bgImgView.image = [UIImage imageNamed:@"huoying.jpg"];bgImgView.contentMode = UIViewContentModeScaleAspectF//[bgImgView setImageToBlur: [UIImage imageNamed:@"huoying.jpg"] blurRadius: completionBlock:nil];bgImgView.userInteractionEnabled = YES;[self.view addSubview:bgImgView];/*毛玻璃的样式(枚举)UIBlurEffectStyleExtraLight,UIBlurEffectStyleLight,UIBlurEffectStyleDark*/UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect];effectView.frame = CGRectMake(, , bgImgView.frame.size.width*., bgImgView.frame.size.height);[bgImgView addSubview:effectView]; 但是我们来看看视图结构,大家会发现和Toolbar不一样哦!其实是因为UIVisualEffectView这个类,构造方法帮我们创建了一个view,而这个view我们给它做了毛玻璃处理,再将其覆盖到了背景图之上嗯! 最后再来给大家介绍一个国外大神封装的UIImageView的分类,里面不管是怎么实现的,反正使用非常简单,只要一句代码就搞定.下面先看代码:UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.view.bounds];//bgImgView.image = [UIImage imageNamed:@"huoying.jpg"];bgImgView.contentMode = UIViewContentModeScaleAspectF// 对背景图片进行毛玻璃效果处理 参数blurRadius默认是,可指定,最后一个参数block回调可以为nil[bgImgView setImageToBlur: [UIImage imageNamed:@"huoying.jpg"] blurRadius: completionBlock:nil];bgImgView.userInteractionEnabled = YES;[self.view addSubview:bgImgView]; 效果图:再来看看添加毛玻璃效果后的视图结构:哈哈哈, 大家应该看懂了, 这是直接对背景图片进行了高斯模糊处理了,其它就不解释了.好啦, 反正iOS中要进行毛玻璃效果处理就这几种方式,看大家的需求,喜欢用哪种就用哪种吧.上面的demo,包括大神封装的分类,如果需要详细的源代码的话,可以到我的gitHub上Clone啦!有问题欢迎留言一起探讨学习.下面给大家介绍图片模糊效果的三种方法第一种使用Core Image进行模糊- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur { CIImage *inputImage = [CIImage imageWithCGImage:image.CGImage]; CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur" keysAndValues:kCIInputImageKey, inputImage, @"inputRadius", @(blur), ]; CIImage *outputImage = filter.outputI CGImageRef outImage = [self.context createCGImage:outputImage fromRect:[outputImage extent]]; return [UIImage imageWithCGImage:outImage]; }第二种使用vImage API进行模糊- (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CGFloat)blur { if (blur
0.f || blur
1.f) { blur = 0.5f; } int boxSize = (int)(blur * 100); boxSize = boxSize - (boxSize % 2) + 1; CGImageRef img = image.CGI vImage_Buffer inBuffer, outB vImage_E void *pixelB CGDataProviderRef inProvider = CGImageGetDataProvider(img); CFDataRef inBitmapData = http://www.open-open.com/code/view/CGDataProviderCopyData(inProvider); 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 = pixelB 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]; //clean up CGContextRelease(ctx); CGColorSpaceRelease(colorSpace); free(pixelBuffer); CFRelease(inBitmapData); CGColorSpaceRelease(colorSpace); CGImageRelease(imageRef); return returnI } 第三种方法是网上找到的(毛玻璃效果)// 内部方法,核心代码,封装了毛玻璃效果 参数:半径,颜色,色彩饱和度- (UIImage *)imageBluredWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage { CGRect imageRect = { CGPointZero, self.size }; UIImage *effectImage = BOOL hasBlur = blurRadius
__FLT_EPSILON__; BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.)
__FLT_EPSILON__; if (hasBlur || hasSaturationChange) { UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); CGContextRef effectInContext = UIGraphicsGetCurrentContext(); CGContextScaleCTM(effectInContext, 1.0, -1.0); CGContextTranslateCTM(effectInContext, 0, -self.size.height); CGContextDrawImage(effectInContext, imageRect, self.CGImage); vImage_Buffer effectInB effectInBuffer.data = http://www.open-open.com/code/view/CGBitmapContextGetData(effectInContext); effectInBuffer.width = CGBitmapContextGetWidth(effectInContext); effectInBuffer.height = CGBitmapContextGetHeight(effectInContext); effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext); UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); CGContextRef effectOutContext = UIGraphicsGetCurrentContext(); vImage_Buffer effectOutB effectOutBuffer.data = CGBitmapContextGetData(effectOutContext); effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext); effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext); effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext); if (hasBlur) { CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale]; NSUInteger radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5); if (radius % 2 != 1) { radius += 1; // force radius to be odd so that the three box-blur methodology works. } vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, (short)radius, (short)radius, 0, kvImageEdgeExtend); vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, (short)radius, (short)radius, 0, kvImageEdgeExtend); vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, (short)radius, (short)radius, 0, kvImageEdgeExtend); } BOOL effectImageBuffersAreSwapped = NO; if (hasSaturationChange) { CGFloat s = saturationDeltaF CGFloat floatingPointSaturationMatrix[] = { 0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0, 0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0, 0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0, 0, 0, 0, 1, }; const int32_t divisor = 256; NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]); int16_t saturationMatrix[matrixSize]; for (NSUInteger i = 0; i
matrixS ++i) { saturationMatrix[i] = (int16_t)roundf(floatingPointSaturationMatrix[i] * divisor); } if (hasBlur) { vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); effectImageBuffersAreSwapped = YES; } else { vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); } } if (!effectImageBuffersAreSwapped) effectImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if (effectImageBuffersAreSwapped) effectImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } // 开启上下文 用于输出图像 UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); CGContextRef outputContext = UIGraphicsGetCurrentContext(); CGContextScaleCTM(outputContext, 1.0, -1.0); CGContextTranslateCTM(outputContext, 0, -self.size.height); // 开始画底图 CGContextDrawImage(outputContext, imageRect, self.CGImage); // 开始画模糊效果 if (hasBlur){ CGContextSaveGState(outputContext); if (maskImage) { CGContextClipToMask(outputContext, imageRect, maskImage.CGImage); } CGContextDrawImage(outputContext, imageRect, effectImage.CGImage); CGContextRestoreGState(outputContext); } // 添加颜色渲染 if (tintColor){ CGContextSaveGState(outputContext); CGContextSetFillColorWithColor(outputContext, tintColor.CGColor); CGContextFillRect(outputContext, imageRect); CGContextRestoreGState(outputContext); } // 输出成品,并关闭上下文 UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return outputI}& 搜索“图老师”或者“tulaoshi_com”加关注,每天最新的美食、健康、育儿、美妆、、手工DIY等生活小技巧,30天变身小巧妇!【微信扫描下图可直接关注】
来源:https://www.tulaoshi.com/n/0090.html
心肌梗死能治好吗 如何治疗更有效 心肌梗死能治好吗?心肌梗塞病症的发病几率还是比较高的病症,尤其是近几年来tulaoshi,更是不断的飙升,虽然说生活水平提高了,但是也给现代人带来了不少负面的影响。 心肌梗死能治好吗? 1、通常治疗心肌梗塞。 绝对卧床休息,进易消化饮食。保持大便通畅(可用果导)。镇静。吸氧:通常鼻导...
石莲花精致小巧,养殖简单,盆栽种植最适合,现在最流行的就是盆栽种植摆设在家居客厅桌面、柜子上、窗台等等地方,给家居天了一丝绿意与清新,下面我们来看看石莲花的繁殖方法有哪些: 石莲花的繁殖方法: 石莲花的繁殖方法:1、分株 最好在春天进行,常用扦插繁殖。室内扦插,四季均可进行,以8-10月...
前一段时间听朋友说起过打印网页的一些方法,在安静的夜晚,听着歌曲无意间发现了几段代码,帖出来跟大家分享一下。 因为我从来没有打印过网页,而且也没有打印机,具体的效果也不是很清楚,测试打印成PDF是正常的,就第二种在弹出设置窗口比第一跟第三种方法多了点。 注意:第二种方法的控件需要IE5.5+的支持,而且因为使用了控件,如果客户...
治女性宫颈糜烂一些小妙招你知道多少 治女性宫颈糜烂一些小妙招你知道多少。宫颈糜烂患者了不能说食用一些小偏方就有一些治疗的效果,这样往往治疗不好疾病还会导致疾病的更深伤害。没有效而且还易复发的方法,还是听听专家的相关介绍吧: 治疗宫颈糜烂的偏方1:药治疗宫颈糜烂偏方的相关介绍油疗法 处方:紫草200克,香油750克 ...
---- Windows下串行通信 ---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同...971被浏览187,630分享邀请回答0添加评论分享收藏感谢收起

我要回帖

更多关于 会声会影局部模糊 的文章

 

随机推荐