ios开发中常常使用的一些方法

1.模糊图片

- (void)getBlurImageAsyn:(UIImage *)sourceImage completionHandler:(void(^)(UIImage *blurImage))handler

{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

        UIImage *blurImage = [self getBlurImage:sourceImage];

        dispatch_async(dispatch_get_main_queue(), ^{

            if (handler) handler(blurImage);

        });

    });

}

#pragma mark 模糊图片方法

- (UIImage *)getBlurImage:(UIImage *)sourceImage

{

    CGSize size = sourceImage.size;

    CIContext *context = [CIContext contextWithOptions:nil];

    CIImage *image = [CIImage imageWithCGImage:sourceImage.CGImage];

    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];

    [filter setValue:image forKey:kCIInputImageKey];

    [filter setValue:@20.0f forKey: @"inputRadius"];

    CIImage *result = [filter valueForKey:kCIOutputImageKey];

    CGImageRef outImage = [context createCGImage:result fromRect:CGRectMake(0, 0, size.width, size.height)];

    UIImage *blurImage = [UIImage imageWithCGImage:outImage];

    return blurImage;

}

 2.本地优先加载图片

 

- (void)getImageWithURL:(NSString *)urlStr completionHandler:(void (^)(UIImage *))handler

{

    [self getImageWithURL:urlStr checkUpdate:NO completionHandler:handler];

}

 

- (void)getImageWithURL:(NSString *)urlStr checkUpdate:(BOOL)check completionHandler:(void(^)(UIImage *image))handler

{

    //先加载本地的图片,再去检查更新这样能够防止网速较慢的情况下默认图片显示过长。

    NSString *fileName = [self getMD5OfString:urlStr];

    NSString *filePath = [NSString stringWithFormat:@"%@/%@.png", [self getFolder:FOLDER_CACHES], fileName];

    UIImage *localImage = [UIImage imageWithContentsOfFile:filePath];

    if (localImage) {

        if (handler) handler(localImage);

    }

    

    if (check == YES || localImage == nil) {

        NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        NSURLRequest *request = [NSURLRequest requestWithURL:url

                                                 cachePolicy:NSURLRequestUseProtocolCachePolicy

                                             timeoutInterval:10.0];

        [NSURLConnection sendAsynchronousRequest:request

                                           queue:[NSOperationQueue mainQueue]

                               completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

                                   if (((NSHTTPURLResponse *)response).statusCode == 200) {

                                       [data writeToFile:filePath atomically:YES];

                                       UIImage *image = [UIImage imageWithData:data];

                                       if (handler && image) handler(image);

                                   }

                               }];

    }

}

 3.MD5加密

- (NSString *)getMD5OfString:(NSString *)str

{

    if (str.length == 0) return nil;

    const char *original_str = [str UTF8String];

    

    unsigned char result[CC_MD5_DIGEST_LENGTH];

    

    CC_MD5(original_str, (uint32_t)strlen(original_str), result);

    

    NSMutableString *hash = [NSMutableString string];

    

    for (int i = 0; i < 16; i++)

        [hash appendFormat:@"%02x", result[i]];

    

    return hash;

    

}

 4.将黑白图片换成指定颜色

- (UIImage*)imageBlackToTransparent:(UIImage*)image withColor:(UIColor *)color{

    CGFloat red;

    CGFloat green;

    CGFloat blue;

    [color getRed:&red green:&green blue:&blue alpha:nil];

    const int imageWidth = image.size.width;

    const int imageHeight = image.size.height;

    size_t      bytesPerRow = imageWidth * 4;

    uint32_t* rgbImageBuf = (uint32_t*)malloc(bytesPerRow * imageHeight);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace,

                                                 kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);

    CGContextDrawImage(context, CGRectMake(0, 0, imageWidth, imageHeight), image.CGImage);

    // 遍历像素

    int pixelNum = imageWidth * imageHeight;

    uint32_t* pCurPtr = rgbImageBuf;

    for (int i = 0; i <pixelNum; i++, pCurPtr++){

        if ((*pCurPtr & 0xFFFFFF00) < 0x99999900)    // 将白色变成透明

        {

            // 改成下面的代码,会将图片转成想要的颜色

            uint8_t* ptr = (uint8_t*)pCurPtr;

            ptr[3] = red * 255.0; //0~255

            ptr[2] = green * 255.0;

            ptr[1] = blue * 255.0;

        }else{

            uint8_t* ptr = (uint8_t*)pCurPtr;

            ptr[0] = 0;

        }

    }

    // 输出图片

    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData);

    CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace,

                                        kCGImageAlphaLast | kCGBitmapByteOrder32Little, dataProvider,

                                        NULL, true, kCGRenderingIntentDefault);

    CGDataProviderRelease(dataProvider);

    UIImage* resultUIImage = [UIImage imageWithCGImage:imageRef];

    // 清理空间

    CGImageRelease(imageRef);

    CGContextRelease(context);

    CGColorSpaceRelease(colorSpace);

    return resultUIImage;

}

 5.包含数字,字符,英文的正则表达式

NSString *regex = @"([A-Z]|[a-z]|[0-9]|[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]){1,50}$";

 

posted @ 2016-07-20 09:33  SKT_answer  阅读(277)  评论(0编辑  收藏  举报