【问题标题】:Pixelated layer on image in iosios中图像上的像素化​​层
【发布时间】:2015-03-02 11:56:53
【问题描述】:

我需要在 UIImage 上添加可以撤消的像素化矩形层。 Just like this..

我使用了这段代码,但它没有做我需要的事情

    CALayer *maskLayer = [CALayer layer];
    CALayer *mosaicLayer = [CALayer layer];

    // Mask image ends with 0.15 opacity on both sides. Set the background color of the layer
    // to the same value so the layer can extend the mask image.
    mosaicLayer.contents = (id)[img CGImage];
    mosaicLayer.frame = CGRectMake(0,0, img.size.width, img.size.height);
    UIImage *maskImg = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"mask" ofType:@"png"]];
    maskLayer.contents = (id)[maskImg CGImage];
    maskLayer.frame = CGRectMake(100,150, maskImg.size.width, maskImg.size.height);

    mosaicLayer.mask = maskLayer;

    [imageView.layer addSublayer:mosaicLayer];

    UIGraphicsBeginImageContext(imageView.layer.bounds.size);
    [imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *saver = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

苹果有没有内置的 iOS 过滤器?请指导我谢谢

【问题讨论】:

    标签: ios objective-c iphone core-graphics


    【解决方案1】:

    【讨论】:

    • 我想在图像上使用图层,它支持吗?
    • 这个答案对全图像素化有效。你不能使用这个在图像上绘制像素化的 rext
    • @Ali 只是裁剪图像,对其进行像素化,然后将其放回原始图像上?
    【解决方案2】:

    我们可以使用 GPUImage 框架,但更好的是使用 iOS 自己的过滤器。简单的编码:)

    - (UIImage *)applyCIPixelateFilter:(UIImage*)fromImage withScale:(double)scale
    {
        /*
         Makes an image blocky by mapping the image to colored squares whose color is defined by the replaced pixels.
         Parameters
    
         inputImage: A CIImage object whose display name is Image.
    
         inputCenter: A CIVector object whose attribute type is CIAttributeTypePosition and whose display name is Center.
         Default value: [150 150]
    
         inputScale: An NSNumber object whose attribute type is CIAttributeTypeDistance and whose display name is Scale.
         Default value: 8.00
         */
        CIContext *context = [CIContext contextWithOptions:nil];
        CIFilter *filter= [CIFilter filterWithName:@"CIPixellate"];
        CIImage *inputImage = [[CIImage alloc] initWithImage:fromImage];
        CIVector *vector = [CIVector vectorWithX:fromImage.size.width /2.0f Y:fromImage.size.height /2.0f];
        [filter setDefaults];
        [filter setValue:vector forKey:@"inputCenter"];
        [filter setValue:[NSNumber numberWithDouble:scale] forKey:@"inputScale"];
        [filter setValue:inputImage forKey:@"inputImage"];
    
        CGImageRef cgiimage = [context createCGImage:filter.outputImage fromRect:filter.outputImage.extent];
        UIImage *newImage = [UIImage imageWithCGImage:cgiimage scale:1.0f orientation:fromImage.imageOrientation];
    
        CGImageRelease(cgiimage);
    
        return newImage;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      相关资源
      最近更新 更多