【问题标题】:Search and save images from google images in iphone sdk在 iphone sdk 中搜索并保存来自谷歌图像的图像
【发布时间】:2011-05-24 11:11:07
【问题描述】:

在我的应用中,我需要从谷歌图片中搜索特定单词的图片。

例如,我想在图像中搜索Earth

如何从 Google 图片中搜索图片并将所选图片保存在文档目录中?

我可以使用任何 API 吗?或者有其他方法吗?

【问题讨论】:

  • 嘿@Meghan,你能指导我吗,你是如何管理所有这些东西的。我遇到了和你提到的一样的问题。请给我一条出路,因为我是新的iOS平台,请帮我一个忙。
  • 您可以使用@Nick Weaver 的答案,也可以使用stackoverflow.com/a/6109653/566431。它使用队列来下载图像。

标签: iphone objective-c cocoa-touch ios4


【解决方案1】:

谷歌 API

Google Image Search API / JSON Developer's Guide.

您必须自己显示图像,因为结果是 json 响应。但是,这将为您提供最大的控制权。结果将包含一个缩略图 URL,您可以使用它来显示预览。

下载图片

可以通过多种方式下载图像:

Google API 的使用仅在某些情况下有效,例如

使用此界面的应用程序必须遵守所有现有的服务条款。最重要的是,您必须在请求中正确地表明自己的身份。

保存图片

收到结果后,您可以将图像保存到磁盘:

NSString *aFileName = @"myImage.jpg";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentDirectory stringByAppendingPathComponent:aFileName];

[myImageAsData writeToFile:path atomically:YES];

或者,如果您已经将图像作为 UIImage

NSData *myImageAsData = [NSData dataWithData:UIImagePNGRepresentation(anImage)];
[myImageAsData writeToFile:path atomically:YES];

【讨论】:

  • 感谢您的链接。通过 Google API,我在 - (void)connectionDidFinishLoading:(NSURLConnection )connection 方法中获得了 NSArray of URLs(图像)。然后在循环中获取 NSData 中的图像(使用 NSData imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];)。它有效,但花费了太多时间。可以做什么?
  • @Meghan 我认为这是一个不同的问题,值得一个不同的问题。
  • 嗨@NickWeaver 首先感谢这么好的文档。如果您也这样做,我会要求您,那么您可以分享代码吗?因为我遇到了真正的麻烦,所以我从过去 10 天开始就一直在做同样的事情,但无法获得想要的结果。请帮帮我
  • @Deepak Khiwani 这里有一个要点:Gist。 JSON API 使用起来非常简单。
  • @NickWeaver 感谢您的支持,但我想从多张图像中获取一张图像,然后将所选图像用于应用程序。有关详细信息,请查看链接stackoverflow.com/questions/16206727/…
【解决方案2】:

首先,您需要 Google 图片搜索 API。 http://code.google.com/apis/imagesearch/

接下来,如果您对只针对 iOS 4.0 及更高版本感兴趣,您可以使用 Grand Central Dispatch 和 iOS 中包含的非常有用的同步数据 API。具体来说,我正在考虑 [NSData dataWithContentsOfURL:]。这将阻塞线程,直到它下载整个图像,所以不要在主线程上运行它。幸运的是,GCD 让您可以轻松地将东西扔到后台线程上。所以你的代码可能看起来像这样:

dispatch_queue_t NetworkQueue = dispatch_queue_create("NetworkQueue", 0);

dispatch_async(NetworkQueue,^{
    NSData* imageResultsData = [NSData dataWithContentsOfURL:
    [NSURL urlWithString:@"https://ajax.googleapis.com/ajax/services/search/images?some_images_query_here"];
   //do something with that data
   //let's say you unpacked it into an NSArray of NSURLs
   for(NSURL* url in myImageArray) {
        dispatch_async(NetworkQueue,^{
            NSData* imageData = [NSData dataWithContentsOfURL:url];
            [imageData writeToFile:file_name_here atomically:YES];
        });
   }
});

【讨论】:

    【解决方案3】:

    Google 图片搜索不工作:

    “Google 图片搜索 API 已于 5 月正式弃用 2011 年 2 月 26 日。它将继续按照我们的弃用政策工作,但 您每天可以提出的请求数量可能会受到限制。我们 鼓励您使用现在支持图片的自定义搜索 API 搜索。”

    这是Custom Search API的链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多