★★ 给项目点亮 Star 以关注! ★★
由 Daniele Margutti 创建 - danielemargutti.com
您的应用程序需要查找图像的尺寸或类型,但图像并非本地存储,而是在另一个资产服务器或云端(例如 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 是一个依赖管理工具,它可以自动化和简化在您的项目中使用像 ImageSizeFetcher 这样的第三方库的过程。您可以使用以下命令安装它
$ sudo gem install cocoapods
构建 ImageSizeFetcher 需要 CocoaPods 1.0.1+。
要使用 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 是一个去中心化的依赖管理器,它可以构建您的依赖项并为您提供二进制框架。
您可以使用 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