Commit 0782c6e7301e5277e83e71dccc9c84ede5a1cdd2

Authored by 王军波
1 parent bb25bc8c

添加图片分类,模糊图片

LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
... ... @@ -161,6 +161,8 @@
161 161 D25BF89B1E7FE046007FB138 /* CNLiveChatManager.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
162 162 D25BF89C1E7FE049007FB138 /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */; };
163 163 D25BF89D1E7FE049007FB138 /* CNLiveMsgTools.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
  164 + D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */; };
  165 + D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D25BF8A21E80C4FC007FB138 /* Accelerate.framework */; };
164 166 D2888D941E6EB8B4003A77C8 /* LVCTabBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888D931E6EB8B4003A77C8 /* LVCTabBar.m */; };
165 167 D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888D9B1E6EBF1B003A77C8 /* LVCLiveViewController.m */; };
166 168 D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2888DB01E6EC05F003A77C8 /* TempViewController.m */; };
... ... @@ -515,6 +517,9 @@
515 517 D25BF8921E7FBAEA007FB138 /* LVCUGCBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCUGCBackgroundView.m; sourceTree = "<group>"; };
516 518 D25BF8961E7FE01B007FB138 /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; };
517 519 D25BF8981E7FE033007FB138 /* CNLiveChatManager.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveChatManager.framework; sourceTree = "<group>"; };
  520 + D25BF89E1E80C4BD007FB138 /* UIImage+LVCVagueImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+LVCVagueImage.h"; sourceTree = "<group>"; };
  521 + D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+LVCVagueImage.m"; sourceTree = "<group>"; };
  522 + D25BF8A21E80C4FC007FB138 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
518 523 D2888D921E6EB8B4003A77C8 /* LVCTabBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCTabBar.h; sourceTree = "<group>"; };
519 524 D2888D931E6EB8B4003A77C8 /* LVCTabBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCTabBar.m; sourceTree = "<group>"; };
520 525 D2888D9A1E6EBF1B003A77C8 /* LVCLiveViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLiveViewController.h; sourceTree = "<group>"; };
... ... @@ -532,6 +537,7 @@
532 537 isa = PBXFrameworksBuildPhase;
533 538 buildActionMask = 2147483647;
534 539 files = (
  540 + D25BF8A31E80C4FC007FB138 /* Accelerate.framework in Frameworks */,
535 541 D2575C7D1E76A4F300E3A8FC /* NHGiftAnimtionSDK.a in Frameworks */,
536 542 812E50531E7699DC004F5FCD /* CNLivePlayerSDK.framework in Frameworks */,
537 543 D25BF89A1E7FE046007FB138 /* CNLiveChatManager.framework in Frameworks */,
... ... @@ -625,6 +631,7 @@
625 631 D2029B9D1E6EAAA50027CD92 /* LiveVideoCloudTests */,
626 632 D2029BA81E6EAAA50027CD92 /* LiveVideoCloudUITests */,
627 633 D2029B821E6EAAA50027CD92 /* Products */,
  634 + D25BF8A11E80C4FC007FB138 /* Frameworks */,
628 635 );
629 636 sourceTree = "<group>";
630 637 };
... ... @@ -1131,6 +1138,8 @@
1131 1138 D2029CE91E6EAE2E0027CD92 /* UILabel+labelFitSize.m */,
1132 1139 D2029CEA1E6EAE2E0027CD92 /* UIView+Extension.h */,
1133 1140 D2029CEB1E6EAE2E0027CD92 /* UIView+Extension.m */,
  1141 + D25BF89E1E80C4BD007FB138 /* UIImage+LVCVagueImage.h */,
  1142 + D25BF89F1E80C4BD007FB138 /* UIImage+LVCVagueImage.m */,
1134 1143 );
1135 1144 path = Category;
1136 1145 sourceTree = "<group>";
... ... @@ -1406,6 +1415,14 @@
1406 1415 path = Videos;
1407 1416 sourceTree = "<group>";
1408 1417 };
  1418 + D25BF8A11E80C4FC007FB138 /* Frameworks */ = {
  1419 + isa = PBXGroup;
  1420 + children = (
  1421 + D25BF8A21E80C4FC007FB138 /* Accelerate.framework */,
  1422 + );
  1423 + name = Frameworks;
  1424 + sourceTree = "<group>";
  1425 + };
1409 1426 D2888D911E6EB897003A77C8 /* View */ = {
1410 1427 isa = PBXGroup;
1411 1428 children = (
... ... @@ -1744,6 +1761,7 @@
1744 1761 D2029B861E6EAAA50027CD92 /* main.m in Sources */,
1745 1762 D2029C8C1E6EADE10027CD92 /* AFURLSessionManager.m in Sources */,
1746 1763 D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */,
  1764 + D25BF8A01E80C4BD007FB138 /* UIImage+LVCVagueImage.m in Sources */,
1747 1765 D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */,
1748 1766 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */,
1749 1767 D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */,
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/View/LVCUGCPlayerLoadingView.m
... ... @@ -7,6 +7,7 @@
7 7 //
8 8  
9 9 #import "LVCUGCPlayerLoadingView.h"
  10 +#import "UIImage+LVCVagueImage.h"
10 11  
11 12 @interface LVCUGCPlayerLoadingView() {
12 13  
... ... @@ -32,38 +33,13 @@
32 33 - (UIImageView *)bgImageView {
33 34 if (!_bgImageView) {
34 35  
35   - // 1、创建输入图像,CIImage类型,这里使用一个网上图片。
36   - CIImage *inputImage = [CIImage imageWithContentsOfURL:[NSURL URLWithString:@"http://echo-image.qiniucdn.com/FtPAdyCH-SlO-5xEe009AFE-N0EF?imageMogr2/auto-orient/quality/100%7CimageView2/4/w/640/q/100"]];
37   -
38   - // 2、构建一个滤镜图表
39   - CIColor *sepiaColor = [CIColor colorWithRed:0.76 green:0.65 blue:0.54];
40   - // 2.1 先构建一个 CIColorMonochrome 滤镜,并配置输入图像与滤镜参数
41   - CIFilter *monochromeFilter = [CIFilter filterWithName:@"CIColorMonochrome" withInputParameters:@{@"inputColor" : sepiaColor,@"inputIntensity":@1.0}];
42   - [monochromeFilter setValue:inputImage forKey:@"inputImage"];// 通过KVC来设置输入图像
43   - // 2.2 先构建一个 CIVignette 滤镜
44   - CIFilter *vignetteFilter = [CIFilter filterWithName:@"CIVignette" withInputParameters:@{@"inputRadius" : @2.0,@"inputIntensity" :@1.0}];
45   - [vignetteFilter setValue:monochromeFilter.outputImage forKey:@"inputImage"];// 以monochromeFilter的输出来作为输入
46   -
47   - // 3、得到一个滤镜处理后的图片,并转换至 UIImage
48   - // 创建一个 CIContext
49   - CIContext *ciContext = [CIContext contextWithOptions:nil];
50   - // 将 CIImage 过渡到 CGImageRef 类型
51   - CGImageRef cgImage = [ciContext createCGImage:vignetteFilter.outputImage fromRect:inputImage.extent];
52   - // 最后转换为 UIImage 类型
53   - UIImage *uiImage = [UIImage imageWithCGImage:cgImage];
54   -
55   -// NSString *path = [[NSBundle mainBundle] pathForResource:@"UGCLoading" ofType:@"jpeg"];
56   -// UIImage *image = [UIImage imageWithContentsOfFile:path];
57   - _bgImageView = [[UIImageView alloc] initWithImage:uiImage];
  36 + NSString *path = [[NSBundle mainBundle] pathForResource:@"UGCLoading" ofType:@"jpeg"];
  37 + UIImage *image = [UIImage imageWithContentsOfFile:path];
  38 + UIImage *blurImage = [UIImage boxblurImage:image withBlurNumber:0.6];
  39 + _bgImageView = [[UIImageView alloc] initWithImage:blurImage];
58 40 _bgImageView.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
59   - _bgImageView.backgroundColor = [UIColor whiteColor];
60 41 _bgImageView.contentMode = UIViewContentModeScaleAspectFill;
61 42 _bgImageView.clipsToBounds = YES;
62   -// UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
63   -// UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
64   -// effectView.frame = _bgImageView.bounds;
65   -// [_bgImageView addSubview:effectView];
66   -// effectView.alpha = .8f;
67 43 }
68 44 return _bgImageView;
69 45 }
... ...
LiveVideoCloud/LiveVideoCloud/UtilKits/Category/UIImage+LVCVagueImage.h 0 → 100644
  1 +//
  2 +// UIImage+LVCVagueImage.h
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/3/21.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +
  11 +@interface UIImage (LVCVagueImage)
  12 +
  13 ++ (UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur;
  14 +
  15 +@end
... ...
LiveVideoCloud/LiveVideoCloud/UtilKits/Category/UIImage+LVCVagueImage.m 0 → 100644
  1 +//
  2 +// UIImage+LVCVagueImage.m
  3 +// LiveVideoCloud
  4 +//
  5 +// Created by cnliveJunBo on 17/3/21.
  6 +// Copyright © 2017年 cnlive. All rights reserved.
  7 +//
  8 +
  9 +#import "UIImage+LVCVagueImage.h"
  10 +#import <Accelerate/Accelerate.h>
  11 +
  12 +@implementation UIImage (LVCVagueImage)
  13 +
  14 ++ (UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur
  15 +{
  16 + if (blur < 0.f || blur > 1.f) {
  17 + blur = 0.5f;
  18 + }
  19 + int boxSize = (int)(blur * 40);
  20 + boxSize = boxSize - (boxSize % 2) + 1;
  21 + CGImageRef img = image.CGImage;
  22 + vImage_Buffer inBuffer, outBuffer;
  23 + vImage_Error error;
  24 + void *pixelBuffer;
  25 + //从CGImage中获取数据
  26 + CGDataProviderRef inProvider = CGImageGetDataProvider(img);
  27 + CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
  28 + //设置从CGImage获取对象的属性
  29 + inBuffer.width = CGImageGetWidth(img);
  30 + inBuffer.height = CGImageGetHeight(img);
  31 + inBuffer.rowBytes = CGImageGetBytesPerRow(img);
  32 + inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
  33 + pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
  34 + if(pixelBuffer == NULL)
  35 + NSLog(@"No pixelbuffer");
  36 + outBuffer.data = pixelBuffer;
  37 + outBuffer.width = CGImageGetWidth(img);
  38 + outBuffer.height = CGImageGetHeight(img);
  39 + outBuffer.rowBytes = CGImageGetBytesPerRow(img);
  40 + error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
  41 + if (error) {
  42 + NSLog(@"error from convolution %ld", error);
  43 + }
  44 + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  45 + CGContextRef ctx = CGBitmapContextCreate( outBuffer.data, outBuffer.width, outBuffer.height, 8, outBuffer.rowBytes, colorSpace, kCGImageAlphaNoneSkipLast);
  46 + CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
  47 + UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
  48 + //clean up CGContextRelease(ctx);
  49 + CGColorSpaceRelease(colorSpace);
  50 + free(pixelBuffer);
  51 + CFRelease(inBitmapData);
  52 + CGColorSpaceRelease(colorSpace);
  53 + CGImageRelease(imageRef);
  54 + return returnImage;
  55 +}
  56 +
  57 +@end
... ...