ImageSizeFetcher 0.9.1

ImageSizeFetcher 0.9.1

Daniele Margutti 维护。



ImageSizeFetcher

通过尽可能少的获取来获取给定 uri 的图像的大小或类型

Version License Platform CocoaPods Compatible Carthage Compatible Twitter

★★ 为我收藏以关注项目! ★★
Daniele Margutti 创建 - danielemargutti.com

是什么是 ImageSizeFetcher

您的应用需要找到图像的大小或类型,但图像未本地存储 – 它在另一个资产服务器或云端(例如 Amazon S3);您的 web 服务不通过 API 暴露大小。

您不希望将整个图像下载到您的应用服务器 – 它可能只是为了获取这些信息就有可能达到数兆字节甚至更大。

此外,您不能等待所有图像的下载来调整您的布局(例如,UICollectionView/UITableView),并且您不能对其进行增量操作而不影响用户体验。

对于最常见的图像类型(GIF、PNG、BMP 等),图像的大小存储在文件的开始处。对于 JPEG 文件,这稍微复杂一些,但即使是这样,您也不需要下载太多图像以找到大小。

ImageSizeFetcher 仅通过下载少数 KB 执行这种最小化获取,并且不依赖于安装外部库;它只是纯 Swift 代码。

支持的格式

目前ImageSizeFetcher支持您在应用中使用的大多数常见格式

  • PNG
  • 动图(GIF)
  • JPEG
  • BMP

大多数情况下,下载的数据大小在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。

  • iOS 8.0+
  • macOS 10.9+
  • tvOS 9.0+
  • watchOS 2.0+

问题与贡献

如果您有任何问题、建议或其他评论,请在此GitHub上提交问题。拉取请求欢迎并鼓励。

安装

通过 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: [email protected]

Twitter: @danielemargutti