从Json下载并保存图像 [英] Download and save Image from Json

查看:52
本文介绍了从Json下载并保存图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have an array url image from Json.

我想在应用程序内部下载,保存和显示图像.检查图片是否存在于应用程序中.

I want to download, save and display images inside app. Check image exist in app.

你能帮我吗!

预先感谢

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

code download,save and display: -> I don't know check image exist Use it:

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

推荐答案

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

Here is complete code you need:

- (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 .

also, to display you might use some existing component, like FGallery, for example.

这篇关于从Json下载并保存图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆