从Json下载并保存图像

时间:2012-10-30 09:53:21

标签: ios arrays json

我有一个来自Json的数组网址图片。

我想在app中下载,保存和显示图片。检查图片存在于应用程序中。

你能帮助我吗?

提前感谢

代码下载,保存和显示: - >我不知道检查图像是否存在 使用它:

for (int i=0; i<[self.imageURLs count]; i++) {
        if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat:@"img%d.jpg",i]]) {
            NSLog(@"file exists at the path");
        }
        else
            NSLog(@"file doesnt exist");

        int y_lblLogo = i==0 ? 45 : (20 * (i+1)) - 15 ;
        UIImage * imageFromURL = [self getImageFromURL:[self.imageURLs objectAtIndex:i]];

        [self saveImage:imageFromURL withFileName:[NSString stringWithFormat:@"img%d",i] ofType:@"png" inDirectory:documentsDirectoryPath];

        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(200 * i, 0, 100, 100)];
        UIImage * imageFromWeb = [self loadImage:[NSString stringWithFormat:@"img%d",i] ofType:@"png" inDirectory:documentsDirectoryPath];
        imgView.image = imageFromWeb;

        [imgView drawRect:CGRectMake(0,y_lblLogo,70.f,30.f)];
        //[self.view addSubview:imgView];
    }

    -(UIImage *) getImageFromURL:(NSString *)fileURL {
              UIImage * result;
             NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
            result = [UIImage imageWithData:data];
             return result; 
    }

    -(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
             if ([[extension lowercaseString] isEqualToString:@"png"]) {
                [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@",
          imageName, @"png"]] options:NSAtomicWrite error:nil];
              } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
                 [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString
          stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite
         error:nil];
             } else {

            } 
    }

     -(UIImage *) loadImage:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
              UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, extension]];
              return result; 
}

1 个答案:

答案 0 :(得分:1)

以下是您需要的完整代码:

- (UIImage *)imageFromURL:(NSString*) surl fromCache:(BOOL)fromCache
{
UIImage *img;
if(surl!=nil && [surl compare:@""]!=NSOrderedSame) {
    NSString* key = [self getFilenameFromUrl:surl];
    NSData *data = [self getDataFromURL:surl fromCache:fromCache];
    if(data) {
        img = [[UIImage alloc] initWithData:data];
    }
}
return img;
}

-(NSString*) getFilenameFromUrl:(NSString*) surl
{
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-zA-Z0-9\\._]"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];
return [regex stringByReplacingMatchesInString:surl options:0 range:NSMakeRange(0, [surl length]) withTemplate:@"_"];
}

-(NSString*) getCacheFolder {
    NSFileManager *filemgr = [NSFileManager defaultManager];
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *sDocumentsDir = [documentPaths objectAtIndex:0];
    sDocumentsDir = [sDocumentsDir stringByAppendingPathComponent:@"/.tmp"];
    BOOL isDir;
    if(!([filemgr fileExistsAtPath:sDocumentsDir isDirectory:&isDir] && isDir))
    {
        [filemgr createDirectoryAtPath:sDocumentsDir withIntermediateDirectories:YES attributes:nil error:nil];
    }
    return sDocumentsDir;
}

-(NSData *) getDataFromURL:(NSString*) surl fromCache:(BOOL) fromCache
{
    NSData *urlData;

    if(surl!=nil && [surl compare:@""]!=NSOrderedSame) {
        surl = [surl stringByReplacingOccurrencesOfString:@" " withString:@"20"];
        NSFileManager *filemgr = [NSFileManager defaultManager];
        NSString *furl = [NSString stringWithFormat:@"%@/%@",[self getCacheFolder],[self getFilenameFromUrl:surl]];

        if (fromCache && [filemgr fileExistsAtPath: furl]==YES) {
            //NSLog (@"File exists");
            urlData = [filemgr contentsAtPath: furl];
        } else if([self hasConnection]){
            //NSLog (@"File not found");
            [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
            NSURL  *url = [NSURL URLWithString:surl];
            NSError *err;
            urlData = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
            if (!err && urlData)
            {
                [filemgr createFileAtPath: furl contents: urlData attributes: nil];
            } else {
                NSLog(@"%@",err);
            }
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        }
    }

    return urlData;
}

另外,要显示您可能会使用某些现有组件,例如FGallery