美文网首页
ios 图片羽化效果

ios 图片羽化效果

作者: 卡卡罗忒 | 来源:发表于2017-05-12 11:53 被阅读567次
    QQ20170512-115249.png

    //羽化

    - (UIImage *) featheredImageWithImage:(UIImage *) image andStartLoaction:(CGFloat)loca{
        
        //  Locations of where the feather starts and ends (0 -> 1)
        const CGFloat featherLocations[] = {loca, 1};
        
        UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);
        
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        //  Draw the original image
        [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
        
        //  A 'knock-out' gradient is used to generate a feather effect,
        //  the alpha channel on the colors defines the alpha of the drawn image
        NSArray *gradientColors = @[(id)[UIColor colorWithWhite:0 alpha:1].CGColor,
                                    (id)[UIColor colorWithWhite:0 alpha:0].CGColor];
        
        CGGradientRef gradient = CGGradientCreateWithColors(CGImageGetColorSpace(image.CGImage), (__bridge CFArrayRef)gradientColors, featherLocations);
        
        //  Because we're changing the draw mode below,
        //  take a snapshot of the current draw settings so we can reset them after
        CGContextSaveGState(ctx);
        
        //  The kCGBlendModeDestinationIn blend mode will provide a'knock-out' effect on
        //  the previously drawn content, using the alpha channels of the gradient's colors
        CGContextSetBlendMode(ctx, kCGBlendModeDestinationIn);
        
        const CGPoint gradientCenter = CGPointMake(image.size.width / 2, image.size.height / 2);
        
        //  The gradient will start at the center (0) and extend to the closest edge (horizontal or vertical)
        const CGFloat startRadius = 0;
        const CGFloat endRadius = MIN(image.size.width,
                                      image.size.height) / 2;
        
        //  Draw the gradient to eliminate the pixels we don't want
        CGContextDrawRadialGradient(ctx, gradient, gradientCenter, startRadius, gradientCenter, endRadius, (kCGGradientDrawsAfterEndLocation));
        
        CGGradientRelease(gradient);
        gradient = NULL;
      
        //  Finally, restore state
        //  (note that in this example CGContextSaveGState and CGContextRestoreGState
        //  are optional because no further drawing happens after this point)
        CGContextRestoreGState(ctx);
        
        //  Get the UIImage version
        UIImage *featheredImage = UIGraphicsGetImageFromCurrentImageContext();
        
        UIGraphicsEndImageContext();
        
        return featheredImage;
    }
    

    相关文章

      网友评论

          本文标题:ios 图片羽化效果

          本文链接:https://www.haomeiwen.com/subject/lyuztxtx.html