首先是一个MD5加密的类,将图片的绝对或相对路径用MD5加密,因为路径中有很多"/",直接存储会有问题
首先要导入头文件
#import <CommonCrypto/CommonCrypto.h>
然后是封装的MD5加密的方法
+ (NSString *)md5:(NSString *)str {const char *cStr = [str UTF8String];unsigned char result[16];CC_MD5(cStr, (unsigned int)strlen(cStr), result); // This is the md5 callreturn [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",result[0], result[1], result[2], result[3],result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]]; }
然后就是存储图片的方法了
+ (void)saveSmallImageWithImage:(UIImage*)image Url:(NSString*)imageUrl AtDirectory:(NSString*)directory {//创建文件管理器NSFileManager *fileManager = [NSFileManager defaultManager];//1、拼接目录NSString *path = [NSHomeDirectory() stringByAppendingString:directory];NSString* savePath = [path stringByAppendingString:[NSString stringWithFormat:@"/%@.jpg",[self md5:imageUrl]]];[fileManager changeCurrentDirectoryPath:savePath];NSLog(@"%@",savePath);
[fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];if (![fileManager fileExistsAtPath:savePath]) {//判断是否存在//createFileAtPath://第一个参数 创建的文件的路径(全路径包括文件名及后缀)//第二个参数 文件里面显示的内容(一般情况下 新创建的文件里面的内容为空 nil)//第三个参数 属性权限 一般时为nil 表示是文件管理类的默认权限BOOL ret = [fileManager createFileAtPath:savePath contents:UIImagePNGRepresentation(image) attributes:nil];if (!ret) {NSLog(@"图片 文件 创建失败");}} }
这个方法中第一个参数是一个UIImage对象,直接将你要缓存的图片写成UIImage对象传进来就行了,imageUrl一般是图片的绝对或相对路径,当然你也可以自己拼接或者直接写一个路径都行,directory则是你要存储的目录,大家都知道NSHomeDirectory()这个属性只能渠道沙盒的根目录,往后的路径需要自己拼接,要是你想直接存到沙盒里的话也可以,directory置空就行了,想自己写路径的话,例如,我想存储到沙河内Documents目录下的CacheImage目录里,就将directory写成"Documents/CacheImage"就行了。。。
再然后就是取出图片的方法了
+ (UIImage*)getSmallImageWithUrl:(NSString*)imageUrl AtDirectory:(NSString*)directory {//创建文件管理器NSFileManager *fileManager = [NSFileManager defaultManager];//获取路径//1、拼接目录NSString *path = [NSHomeDirectory() stringByAppendingString:directory];NSString* savePath = [path stringByAppendingString:[NSString stringWithFormat:@"/%@.jpg",[self md5:imageUrl]]];[fileManager changeCurrentDirectoryPath:savePath];NSData* imageData = [fileManager contentsAtPath:savePath];if (!imageData) {NSLog(@"图片 文件 获取失败");}return [UIImage imageWithData:imageData]; }
参数的含义跟存储方法的含义是一样的,只不过将存储图片改成返回一个图片了,这样就行了,你就可以按照自己的想法来缓存图片了。。。
欢迎大家提出建议和意见,大家一起学习,一起进步。。。