2015-03-02 82 views
0

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

我用这个代码,但它不是做同样的事情,因为我需要

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?请指引我感谢

回答

1

我们可以使用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; 
} 
1
+0

我想在图像上使用图层是否支持? – Ali 2015-03-03 05:22:31

+0

此答案适用于全图像素化。你不能通过使用这个 – Ali 2015-03-03 12:19:53

+0

@Ali在图像上绘制像素化的文本文件只需裁剪图像,像素化它,然后将其放回原始图像上? – rounak 2015-03-03 15:26:10