2013-11-15 27 views
6

URLからイメージをダウンロードし、Objective-Cを使用してそのイメージをコンピュータに保存する方法を教えてください。これは私がこれまでに得たものである:URLから画像をダウンロードしてパソコンに保存するにはどうすればよいですか?

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

UIImage *imageFromURL = [self getImageFromURL:@"https://www.google.com/images/srpr/logo11w.png"]; 

[self saveImage:imageFromURL withFileName:@"Google Logo" ofType:@"png" inDirectory:documentsDirectoryPath]; 

UIImage *imageFromWeb = [self loadImage:@"Google Logo" ofType:@"png" inDirectory:documentsDirectoryPath]; 

は、XcodeはNSImageではと交換しようとすると、UIIMageについて不平を言います。また、宣言されていない識別子 'self'についても不平を言います。

これを実行するには、HTTPコールを行う必要があります。私のように私に説明してください。

+1

ですので、Mac OS Xプログラムですか? – Raptor

+0

はい、Mac OS Xコンピュータのハードドライブに保存しようとしています。 –

+0

これはiOSアプリ(iOSで質問にタグを付けました)を使って行うのですか、これはMacアプリで行うのですか? – rmaddy

答えて

6

ここでは、画像をドキュメントディレクトリに保存するコードを示します。

-(void)saveImagesInLocalDirectory 
{ 
     NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString *imgName = @"image.png"; 
      NSString *imgURL = @"www.example.com/image/image.png"; 
      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSString *writablePath = [documentsDirectoryPath stringByAppendingPathComponent:imgName]; 

      if(![fileManager fileExistsAtPath:writablePath]){ 
       // file doesn't exist 
       NSLog(@"file doesn't exist"); 
       if (imgName) { 
        //save Image From URL 
        [self getImageFromURLAndSaveItToLocalData:imgName fileURL:imgURL inDirectory:documentsDirectoryPath]; 
       } 
      } 
      else{ 
       // file exist 
       NSLog(@"file exist"); 
      } 
} 

-(void) getImageFromURLAndSaveItToLocalData:(NSString *)imageName fileURL:(NSString *)fileURL inDirectory:(NSString *)directoryPath { 
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; 

    NSError *error = nil; 
    [data writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imageName]] options:NSAtomicWrite error:&error]; 

    if (error) { 
     NSLog(@"Error Writing File : %@",error); 
    }else{ 
     NSLog(@"Image %@ Saved SuccessFully",imageName); 
    } 
} 

そして、これは一つの方法コード..です

-(void)saveImagesInLocalDirectory 
{ 
     NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
      NSString *imgName = @"image.png"; 
      NSString *imgURL = @"www.example.com/image/image.png"; 
      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSString *writablePath = [documentsDirectoryPath stringByAppendingPathComponent:imgName]; 

      if(![fileManager fileExistsAtPath:writablePath]){ 
       // file doesn't exist 
       NSLog(@"file doesn't exist"); 
        //save Image From URL 
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString: imgURL]]; 

        NSError *error = nil; 
        [data writeToFile:[documentsDirectoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", imgName]] options:NSAtomicWrite error:&error]; 

        if (error) { 
          NSLog(@"Error Writing File : %@",error); 
        }else{ 
          NSLog(@"Image %@ Saved SuccessFully",imgName); 
        } 
      } 
      else{ 
       // file exist 
       NSLog(@"file exist"); 
      } 
} 
+0

おかげさまでありがとうございましたが、私は完全なnewbです。カスタムメソッドを使用せずにそれを行う方法はありますか?そうでない場合、大きな問題ではない、私はそれがどのように動作するか把握した後も答えを受け入れるだろう。 –

+0

このメソッドは大したことではありません。私は、アプリケーションで抽象度bcozを作成しました。この同じメソッドを複数回使用しています。 2番目のメソッドコードを最初のメソッドで追加することができます。 – Dilip

+0

さて、私はそれをスピンしてみましょう、私はそれが行くようになる、私は戻ってくるとあなたの答えを受け入れるでしょう。 –

0

これは私のソリューションです!

+(BOOL)downloadMedia :(NSString*)url_ :(NSString*)name{ 
    NSString *stringURL = url_; 
    NSURL *url = [NSURL URLWithString:stringURL]; 
    NSData *urlData = [NSData dataWithContentsOfURL:url]; 
    if (urlData) 
    { 
     NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,name]; 
     [urlData writeToFile:filePath atomically:YES]; 
     return YES; 
    } 
    return NO; 
} 

+(UIImage*)loadMedia :(NSString*)name{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:name]; 
    UIImage *img_ = [UIImage imageWithContentsOfFile:getImagePath]; 
    return img_; 
} 
関連する問題