この発想はなかった。
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);
}
ソースも参考になった。




