objective-c - iOS 9.3 UIGraphicsImageRenderer 没有显示任何其他选项吗?

标签 objective-c effect renderer gaussianblur feather

我想在裁剪时对图像应用羽化效果,但我想使用 UIGraphicsImageRenderer 渲染图像渲染为零(iOS 9.3)是否有任何其他选项可以在 iOS 9.3 中渲染图像

这是我的代码:

UIImage* Img = _myimage;

UIImageView * imageview = [[UIImageView alloc]initWithImage:Img];

[imageview setFrame:CGRectMake(0, 0, Img.size.width, Img.size.height)];

UIBezierPath *aPath;

CAShapeLayer *shapeLayer;
aPath = [UIBezierPath bezierPath];
aPath.contractionFactor = 0.8;
NSValue *mvalue = [_pointsarray objectAtIndex:0];
CGPoint mp2 = [mvalue CGPointValue];
[aPath moveToPoint:mp2];
[aPath addBezierThroughPoints:_pointsarray];
[aPath closePath];

aPath.lineWidth = 2;

shapeLayer = [CAShapeLayer new];

shapeLayer.path=aPath.CGPath;

[shapeLayer setFillColor:[UIColor redColor].CGColor];

[shapeLayer fillColor];

//此处Renderer在iOS 9.3中为nil

UIGraphicsImageRenderer * renderer = [[UIGraphicsImageRenderer alloc] initWithSize:Img.size];

UIImage *shapeImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context)
{

    [shapeLayer renderInContext: context.CGContext];

}];


CIImage * shapeCimage = [[CIImage alloc] initWithImage:shapeImage];
CIFilter * gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:shapeCimage forKey: @"inputImage"];
[gaussianBlurFilter setValue:@8 forKey:@"inputRadius"];

CIImage * blurredCIImage = [gaussianBlurFilter valueForKey:kCIOutputImageKey];
UIImage * blurredImage = [UIImage imageWithCIImage:blurredCIImage];

UIImageView *maskedImageView = [[UIImageView alloc]initWithImage:blurredImage];
maskedImageView.contentMode = UIViewContentModeScaleAspectFit;
maskedImageView.frame = imageview.frame;
imageview.layer.mask=maskedImageView.layer;

[self.view addSubview:imageview];

最佳答案

UIGraphicsImageRenderer 在 iOS 9 中不可用。如果您需要针对此,您可以轻松地编写自己的代码:

+(instancetype)LT_imageByDrawingOnCanvasOfSize:(CGSize)size usingBlock:(LTImageDrawingContextBlock)block
{
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), NO, 0.0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    block( context );

    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return theImage;
}

关于objective-c - iOS 9.3 UIGraphicsImageRenderer 没有显示任何其他选项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082314/

相关文章:

css - 悬停效果多个子元素

java - 对于 JSP 中的 jsp 页面上的每次重新渲染,列表都会变空

java - 如何按行使用 cellRenderer

c# - 如何使统一对象的颜色100%不透明

objective-c - 自定义tableView : Corner radius, 减少宽度和阴影

objective-c - iOS 上的 Autocad 格式查看器

iphone - iOS - 如果经过屏幕底部

Javascript/JQuery 做翻转效果确认

objective-c - 将 NSProgress 与嵌套的 NSOperations 一起使用

actionscript-3 - ActionScript混响算法