从Json下载并保存图像 [英] Download and save Image from Json
本文介绍了从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屋!
查看全文