統計情報(30日間)


最新情報をツイート

人気の投稿

iOS シミュレータのフォトライブラリにテスト用の画像を自動生成するツール

このエントリーをはてなブックマークに追加

この発想はなかった。

ELCImageGrabber | iPhone Programming Tutorials


ビルドして試してみた。すると子猫の画像が大量に生成されてフォトライブラリに追加された。

猫の画像はともかく開発用途でこれは使える。

ソースコードはこんな感じ。

まず Googleの画像検索を使って写真の URLを集めてくる。NSJSONSerialization が使われている。
- (void)getImageUrls 
{
    NSMutableArray *urls = [NSMutableArray array];

    //google image api has an 8 page max, with 8 images per page, so 64 image max per search term
    int urls_grabbed = 0;
    for (int i = 0; i < 8; i++) {
        if (urls_grabbed < MAX_IMAGES) {
            NSURL *jsonURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=cute+kitten&rsz=8&start=%d", i * 8]];
            NSData *jsonData = [NSData dataWithContentsOfURL:jsonURL];
            
            id json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
            for (id result in [[json objectForKey:@"responseData"] objectForKey:@"results"]) {
                [urls addObject:[NSURL URLWithString:[result objectForKey:@"url"]]];
            }
            
            urls_grabbed++;
        }        
    }
    
    self.imageUrls = [NSArray arrayWithArray:urls];
}
続いてダウンロード。※この downloadImages自体は別のメソッドで dispatch_async内から呼ばれている。
- (void)downloadImages
{
    dispatch_queue_t image_queue = dispatch_queue_create("com.elctech.image_queue", NULL);

    for (int i = 0; i < MAX_IMAGES; i++) {
        dispatch_async(image_queue, ^{
            if (KEEP_DOWNLOADING) {
                UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[self.imageUrls objectAtIndex:i]]];
                UIImageWriteToSavedPhotosAlbum(image, self, nil, NULL);
                
                //back on the main thread
                dispatch_async(dispatch_get_main_queue(), ^{
                    
                    if (KEEP_DOWNLOADING) {
                        mainImageView.image = image; 
                    }
                    
                    if (i == MAX_IMAGES - 1) {
                        [self cancelDownloads:nil];
                    }
                    
                });
            }
        });
    }
    
    dispatch_release(image_queue);
    
}


ソースも参考になった。

Leave a Reply