设为首页 加入收藏

TOP

图片裁剪/滤镜渲染(六)
2019-08-30 01:12:11 】 浏览:179
Tags:图片 裁剪 滤镜 渲染
]; //缩放后调整imgView的位置 CGFloat imgViewX = 0; CGFloat imgViewY = 0; CGFloat imgWidth = CGRectGetWidth(self.imgView.frame)*scale; CGFloat imgHeight = CGRectGetHeight(self.imgView.frame)*scale; imgViewX = self.clipAreaLayer.leftEdge-preRoOffsetX*scale; imgViewY = self.clipAreaLayer.topEdge-preRoOffsetY*scale; //修正imgView位置 self.imgView.frame = CGRectMake(imgViewX, imgViewY, imgWidth, imgHeight); //修正clipAreaLayer位置 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.clipAreaLayer.hidden = NO; }); [self configShadowArea]; }

  //裁剪

//要的是实际图片的大小
- (UIImage *)clipDownOriginalImg
{
    CGFloat imageScale = MIN(self.imgView.frame.size.width/self.targetImg.size.width, self.imgView.frame.size.height/self.targetImg.size.height);
    CGFloat clipX = (self.clipAreaLayer.leftEdge - self.imgView.frame.origin.x)/imageScale;
    CGFloat clipY = (self.clipAreaLayer.topEdge - self.imgView.frame.origin.y)/imageScale;
    CGFloat clipWidth = self.clipAreaWidth/imageScale;
    CGFloat clipHeight = self.clipAreaHeight/imageScale;
    CGRect clipImgRect = CGRectMake(clipX, clipY, clipWidth, clipHeight);
    
    CGImageRef sourceImageRef = [self.targetImg CGImage];
    CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, clipImgRect);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
    CGImageRelease(newImageRef);
    
    return newImage;
}

  

二、滤镜——主要用到GPUImage框架

- (void)colorImg:(UIImage *)img
{
    [self.filter forceProcessingAtSize:img.size];
    self.staticPicture.image = img;
    
    if (self.outPutImgArr.count > 0) {
        [self.outPutImgArr removeAllObjects];
    }
    
    //图片太多,内存爆增,系统会自动杀掉app
//    [self.outPutImgArr addObject:img];
//    NSArray *paramArr = @[@"0.1", @"0.2", @"0.3", @"0.4", @"0.5", @"0.6", @"0.7", @"0.8", @"0.9", @"1.0"];
    NSArray *paramArr = @[@"0.3", @"0.5", @"0.7", @"0.9", @"1.0"];
    
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_async(queue, ^{

        dispatch_apply(paramArr.count, queue, ^(size_t index) {

            NSString *paramStr = paramArr[index];
            [self.filter setIntensity: paramStr.floatValue];
            [self.staticPicture processImage];
            [self.outPutImgArr addObject:[self.filter imageFromCurrentlyProcessedOutput]];
            
//            NSLog(@"memoryUsage------%lld", [self memoryUsage]);

            dispatch_async(dispatch_get_main_queue(), ^{
                [self reloadData];
            });
        });
        
//        NSLog(@"-------Done1");
        
    });
    
//    NSLog(@"-------Done2");
    
}

  

三、效果图

 

 

GitHub地址

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS-AFN Post JSON格式数据 下一篇iOS----------时间戳与NSDate

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目