前言:在iOS項(xiàng)目開發(fā)中,有很多時(shí)候我們需要將某張圖片進(jìn)行一些處理付枫,以達(dá)到某些特定效果烹玉。在這里我們將提供圖片的三種效果以供大家借鑒,如果各位大神有更多的效果阐滩,也請(qǐng)不吝賜教二打。
方法調(diào)用
// 二值化
- (IBAction)coverToGrayScale:(id)sender {
?? ?? ? _imageView.image = [_imageView.image covertToGrayScale];
}
// 高斯模糊
- (IBAction)gaosiBlur:(id)sender {
?? ?? ? _imageView.image = [_imageView.image gaussianBlur];
}
// 灰度
- (IBAction)grayImage:(id)sender {
? ? ? _imageView.image = [_imageView.image grayImage];
?}
/**?二值化?*/
- (UIImage *)covertToGrayScale{
??? CGSize size =[self size];
??? int width =size.width;
??? int height =size.height;
??? //像素將畫在這個(gè)數(shù)組
??? uint32_t *pixels = (uint32_t *)malloc(width *height *sizeof(uint32_t));
??? //清空像素?cái)?shù)組
??? memset(pixels, 0, width*height*sizeof(uint32_t));
??? CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
??? //用 pixels 創(chuàng)建一個(gè) context ???
CGContextRef context =CGBitmapContextCreate(pixels, width, height, 8, width*sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast); ???
CGContextDrawImage(context, CGRectMake(0, 0, width, height), [self CGImage]);
??? int tt =1; ??? CGFloat intensity; ??? int bw; ??? for (int y = 0; y 0.45?255:0; ??????????? rgbaPixel[tt] = bw;??????????? rgbaPixel[tt + 1] = bw; ??????????? rgbaPixel[tt + 2] = bw;
??????? }??? }
? ??CGImageRef image = CGBitmapContextCreateImage(context); ? ??CGContextRelease(context);
??? CGColorSpaceRelease(colorSpace);
??? free(pixels);
? ??UIImage *resultUIImage = [UIImage imageWithCGImage:image]; ? ??CGImageRelease(image);
??? return resultUIImage; }
/**?轉(zhuǎn)化灰度?*/
- (UIImage *)grayImage{
? ??int width = self.size.width; ??? int height = self.size.height;
? ??CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); ? ??CGContextRef context = CGBitmapContextCreate (nil, ????????????????????????????????????????????????? width,????????????????????????????????????????????????? height,?????????????????????????????????????????????????
8,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0, ????????????????????????????????????????????????? colorSpace,????????????????????????????????????????????????? kCGImageAlphaNone); ? ??CGColorSpaceRelease(colorSpace);
? ??if (context == NULL) {
??????? return nil; ???
}? ?
?CGContextDrawImage(context,?????????????????????? CGRectMake(0, 0, width, height), self.CGImage); ? ?
?UIImage *grayImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)]; ??? CGContextRelease(context); ? ??
return grayImage; }
#pragma mark - 高斯模糊
- (UIImage *)gaussianBlur; {
??? //轉(zhuǎn)換圖片 ???
CIContext *context = [CIContext contextWithOptions:nil]; ???
CIImage *midImage = [CIImage imageWithData:UIImagePNGRepresentation(self)];
?//圖片開始處理 ???
CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"]; ???
[filter setValue:midImage forKey:kCIInputImageKey]; ???
//value 改變模糊效果值 ???
[filter setValue:@10.0f forKey:@"inputRadius"]; ???
CIImage *result =[filter valueForKey:kCIOutputImageKey]; ???
CGImageRef outImage =[context createCGImage:result fromRect:[result extent]]; ???
//轉(zhuǎn)化為 UIImage ???
UIImage *resultImage =[UIImage imageWithCGImage:outImage]; ??? CGImageRelease(outImage); ???
return resultImage;
}
#pragma mark - 濾鏡處理
- (UIImage *)setFilterWithFilterName:(NSString *)filterName {???
//轉(zhuǎn)換圖片 ???
CIContext *context = [CIContext contextWithOptions:nil]; ???
CIImage *midImage = [CIImage imageWithData:UIImagePNGRepresentation(self)]; ???
//圖片開始處理 ???
CIFilter *filter = [CIFilter filterWithName:filterName]; ???
@try { ???????
[filter setValue:midImage forKey:kCIInputImageKey]; ???
}
@catch (NSException *exception) {
} @finally {
?????????? }??????
CIImage *result =[filter valueForKey:kCIOutputImageKey]; ???
CGImageRef outImage =[context createCGImage:result fromRect:[result extent]]; ???
//轉(zhuǎn)化為 UIImage ???
UIImage *resultImage =[UIImage imageWithCGImage:outImage]; ??? CGImageRelease(outImage); ???
return resultImage; }