ImageSizeFetcher

查找给定 URI 的图像尺寸或类型,只需获取所需的最少数据

Version License Platform CocoaPods Compatible Carthage Compatible Twitter

★★ 给项目点亮 Star 以关注! ★★
Daniele Margutti 创建 - danielemargutti.com

什么是 ImageSizeFetcher

您的应用程序需要查找图像的尺寸或类型,但图像并非本地存储,而是在另一个资产服务器或云端(例如 Amazon S3);您的 Web 服务未通过 API 公开尺寸信息。

您不想将整个图像下载到您的应用程序服务器——仅仅为了获取此信息,它可能就有数十 KB 甚至 MB。

此外,您无法等待所有图像下载完毕才调整布局(例如 UICollectionView/UITableView),也无法增量式地进行,否则会给用户带来糟糕的用户体验。

对于大多数常见的图像类型(GIF、PNG、BMP 等),图像尺寸都简单地存储在文件开头。对于 JPEG 文件,情况稍微复杂一些,但即使如此,您也不需要获取图像的大部分内容即可找到尺寸。

ImageSizeFetcher 执行这种最小化的获取,仅下载几 KB 数据,并且不依赖于安装外部库;它完全使用纯 Swift 编写。

支持的格式

目前,ImageSizeFetcher 支持您在应用程序中最常用的格式

在大多数情况下,下载的数据量低于 50 KB。

工作原理

如果您有兴趣了解更多关于其工作原理的信息,我写了一篇文章,您可以在我的博客上找到

“在 Swift 中[完全]不下载图像的情况下预取图像尺寸”

要使用它,您只需实例化(并保持强引用)ImageSizeFetcher 类。它支持请求的本地内存缓存,并具有 GCD 队列来自动管理多个请求;您只需调用 sizeFor() 方法

let imageURL: URL = ...
fetcher.sizeFor(atURL: $0.url) { (err, result) in
  // error check...
  print("Image size is \(NSStringFromCGSize(result.size))")
}

单元测试

单元测试位于 Tests 文件夹内。

要求

ImageSizeFetcher 兼容 Swift 4.x。

问题 & 贡献

如果您有问题、建议或其他意见,请在 GitHub 上提交 issue。欢迎并鼓励提交 Pull Request。

安装

通过 CocoaPods 安装

CocoaPods 是一个依赖管理工具,它可以自动化和简化在您的项目中使用像 ImageSizeFetcher 这样的第三方库的过程。您可以使用以下命令安装它

$ sudo gem install cocoapods

构建 ImageSizeFetcher 需要 CocoaPods 1.0.1+。

通过 Podfile 安装

要使用 CocoaPods 将 ImageSizeFetcher 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
use_frameworks!
pod 'ImageSizeFetcher'
end

然后,运行以下命令

$ pod install

Carthage

Carthage 是一个去中心化的依赖管理器,它可以构建您的依赖项并为您提供二进制框架。

您可以使用 Homebrew 安装 Carthage,使用以下命令

$ brew update
$ brew install carthage

要使用 Carthage 将 ImageSizeFetcher 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "malcommac/ImageSizeFetcher"

运行 carthage 以构建框架,并将构建的 ImageSizeFetcher.framework 拖到您的 Xcode 项目中。

版权

ImageSizeFetcher 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。

Daniele Margutti: hello@danielemargutti.com

Twitter: @danielemargutti