iOS 图片模糊处理和自动获取图片尺寸

来源:互联网 发布:linux系统密码破解 编辑:程序博客网 时间:2024/05/02 04:50

1.图片模糊处理:

方法一:

+ (UIImage *)coreBlurImage:(UIImage *)image           withBlurNumber:(CGFloat)blur {        CIContext *context = [CIContext contextWithOptions:nil];    CIImage  *inputImage=[CIImage imageWithCGImage:image.CGImage];    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];    [filter setValue:inputImage forKey:kCIInputImageKey];    [filter setValue:@(blur) forKey: @"inputRadius"];    //模糊图片    CIImage *result=[filter valueForKey:kCIOutputImageKey];    CGImageRef outImage=[context createCGImage:result fromRect:[result extent]];    UIImage *blurImage=[UIImage imageWithCGImage:outImage];    CGImageRelease(outImage);    return blurImage;}

这是在网上所出来最多的一个方法,但是在使用的时候发现非常消耗性能,会阻塞主线程,效果很差。


方法二:

+ (UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur {    if (blur < 0.f || blur > 1.f) {        blur = 0.5f;    }    int boxSize = (int)(blur * 40);    boxSize = boxSize - (boxSize % 2) + 1;        CGImageRef img = image.CGImage;        vImage_Buffer inBuffer, outBuffer;    vImage_Error error;        void *pixelBuffer;    //从CGImage中获取数据    CGDataProviderRef inProvider = CGImageGetDataProvider(img);    CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);    //设置从CGImage获取对象的属性    inBuffer.width = CGImageGetWidth(img);    inBuffer.height = CGImageGetHeight(img);    inBuffer.rowBytes = CGImageGetBytesPerRow(img);        inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);        pixelBuffer = malloc(CGImageGetBytesPerRow(img) *                         CGImageGetHeight(img));        if(pixelBuffer == NULL)        NSLog(@"No pixelbuffer");        outBuffer.data = pixelBuffer;    outBuffer.width = CGImageGetWidth(img);    outBuffer.height = CGImageGetHeight(img);    outBuffer.rowBytes = CGImageGetBytesPerRow(img);        error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);        if (error) {        NSLog(@"error from convolution %ld", error);    }        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();    CGContextRef ctx = CGBitmapContextCreate(                                             outBuffer.data,                                             outBuffer.width,                                             outBuffer.height,                                             8,                                             outBuffer.rowBytes,                                             colorSpace,                                             kCGImageAlphaNoneSkipLast);    CGImageRef imageRef = CGBitmapContextCreateImage (ctx);    UIImage *returnImage = [UIImage imageWithCGImage:imageRef];        //释放C对象    CGContextRelease(ctx);    CGColorSpaceRelease(colorSpace);        free(pixelBuffer);    CFRelease(inBitmapData);    CGImageRelease(imageRef);        return returnImage;}
这个方法在性能上就好了很多,非常流程




2.自动获取图片尺寸

方法一:

-(void)test1{    UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Irelia_0.jpg"]];    [imageView sizeToFit];    NSLog(@"%@", NSStringFromCGRect(imageView.frame));}
这个方法主要是通过sizeToFit获取imageView的尺寸


方法二:

-(void)test2{    UIImageView * imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Irelia_0.jpg"]];    CGImageRef img = imageView.image.CGImage;        CGFloat imageWidth = (CGFloat)CGImageGetWidth(img);    CGFloat imageHeight = (CGFloat)CGImageGetHeight(img);        NSLog(@"imageWidth:%f====imageHeight:%f", imageWidth, imageHeight);}
这个方法主要是通过CGImageGetWidth和CGImageGetHeight来获取image的尺寸






0 0
原创粉丝点击