1.swift
生成一个UIView的分类
/// 截屏
func screenshot() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.main.scale)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
self.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image;
}
/// 生成马赛克图片
func readburnImage() -> UIImage? {
guard let image = screenshot() else {return nil}
guard let data = image.pngData() else {return nil}
let pCIImage = CIImage(data: data)
let pCIContext = CIContext(options: nil)
let filter = CIFilter(name: "CIPixellate")
filter?.setValue(pCIImage, forKey: kCIInputImageKey)
guard let outputImage = filter?.outputImage else {return nil}
guard let cgimg = pCIContext.createCGImage(outputImage, from: outputImage.extent) else {return nil}
let newImage = UIImage(cgImage: cgimg)
return newImage
}
#2 Objective-C
-(UIImage *)imageWithScreenshot {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, false, UIScreen.mainScreen.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
if (context) {return nil;}
[self.layer renderInContext:context];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
-(UIImage *)imageWithMosaic {
// 截屏
UIImage * image = [self imageWithScreenshot];
NSData * data = UIImagePNGRepresentation(image);
//创建CIImage对象
CIImage * pCIImage = [CIImage imageWithData:data];
// 创建基于GPU的CIContext对象
CIContext * pCIContext = [CIContext contextWithOptions:nil];
// 创建过滤器
CIFilter * filter = [CIFilter filterWithName:@"CIPixellate"];
// 设置过滤器参数
[filter setValue:pCIImage forKey:kCIInputImageKey];
// 得到过滤后的图片
CIImage *otImage = [filter outputImage];
// 转成cg
CGImageRef cgImage = [pCIContext createCGImage:otImage fromRect:[otImage extent]];
// UIimage
UIImage * newImage = [UIImage imageWithCGImage:cgImage];
// release
CGImageRelease(cgImage);
return newImage;
}