ios 图片羽化效果

ios 图片羽化效果_第1张图片
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 图片羽化效果)