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}$";