【问题标题】:CGImageSourceCreateWithURL with authentication带有身份验证的 CGImageSourceCreateWithURL
【发布时间】:2013-09-17 14:00:56
【问题描述】:

我正在尝试从以下网址读取图像属性:

http://www.example.com/ws/img/8

因为它是一个网络服务,我需要将身份验证传递给 URL。 我不想下载图像来读取它的属性。所以我尝试像这样使用 CGImageSourceCreateWithURL:

CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL URLWithString:@"http://admin:admin@www.example.com/ws/img/8"], NULL);
CFDictionaryRef props = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);

但是props 仍然返回 null。

有没有办法通过身份验证访问图像属性? (如果我通过 RestKit 功能下载图像,它当然可以)

谢谢

【问题讨论】:

  • 您如何指定身份验证(使用 RestKit)?
  • 嗨,韦恩。 RKRequest* 对象具有用户名和密码属性。

标签: ios objective-c web-services authentication


【解决方案1】:

我不会使用CGImageSourceCreateWithURL,而是使用具有适当身份验证的NSURLRequest,并将图像下载为NSData,然后使用CGImageSourceCreateWithData,或者如果已经可以使用RestKit,则只需使用RestKit下载图像。

这将使您在身份验证协议方面更加灵活。如果您正在执行基本的 HTTP GET 而不需要额外的信息,那么 withURL 初始化器实际上只是一个实用函数。

【讨论】:

  • 您好,Benoit。正如我所说,我不想下载图像来阅读它的属性。为什么?因为我使用collectionview,我需要在(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 中获取图像大小,然后再下载单个collectionview 单元格中的图像。
  • CGImageSourceCreateWithURL 实际上会下载图像以读取其属性。
  • 嗯好吧,我不明白这个方法是如何工作的......没有下载就没有办法读取图像属性?
  • CGImageSourceCreateWithURL 不应该加载像素数据,它只会加载图像属性。这就是方法的重点。
  • 我想这可能取决于服务器支持哪些选项以及实际下载多少数据......
【解决方案2】:

我认为您需要查看使用CGImageSourceCreateWithDataProvider 并使用CGDataProvider 仅从图像中下载请求的信息。这将允许您使用 API 进行下载,该 API 为您提供了添加授权标头的选项。

如果您可以控制服务器,最好创建一个索引文件,该文件可以为您提供可用图像的详细信息以及它们的大小。您显然是从某个地方获取图像 URL,因此它还应该同时返回一些上下文数据。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 2020-11-11
    • 2021-12-20
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2017-10-29
    • 2015-09-09
    • 2013-06-09
    相关资源
    最近更新 更多