码迷,mamicode.com
首页 > 其他好文 > 详细

图片缓存到沙盒(自定义的方法,适合已经取得UIImage对象时候使用)

时间:2015-04-24 18:46:13      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

首先是一个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 call
    return [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];
}

参数的含义跟存储方法的含义是一样的,只不过将存储图片改成返回一个图片了,这样就行了,你就可以按照自己的想法来缓存图片了。。。

欢迎大家提出建议和意见,大家一起学习,一起进步。。。

图片缓存到沙盒(自定义的方法,适合已经取得UIImage对象时候使用)

标签:

原文地址:http://www.cnblogs.com/johnsonblogs/p/4453787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!