• This repository has been archived on 07/Oct/2019
  • Stars
    star
    442
  • Rank 95,325 (Top 2 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Finds the type/size of an image given its URL by fetching as little data as needed

ImageSizeFetcher

Finds the size or type of an image given its uri by fetching as little as needed

Version License Platform CocoaPods Compatible Carthage Compatible Twitter

โ˜…โ˜… Star me to follow the project! โ˜…โ˜…
Created by Daniele Margutti - danielemargutti.com

What's ImageSizeFetcher

Your app needs to find the size or type of an image but it's not locally stored โ€“ itโ€™s on another asset server, or in the cloud (Amazon S3 for example); your webservice does not expose the size via APIs.

You donโ€™t want to download the entire image to your app server โ€“ it could be many tens of kilobytes, or even megabytes just to get this information.

Moreover you can't wait the download of all images to adjust your layout (ie. UICollectionView/UITableView) and you can't do it incrementally without incur in a poor UX experience for your user.

For most common image types (GIF, PNG, BMP etc.), the size of the image is simply stored at the start of the file. For JPEG files itโ€™s a little bit more complex, but even so you do not need to fetch much of the image to find the size.

ImageSizeFetcher does this minimal fetch just downloade few kb and doesnโ€™t rely on installing external libraries; it's just in pure Swift.

Supported Formats

Currently ImageSizeFetcher supports the most common formats you can use in your app:

  • PNG
  • GIF
  • JPEG
  • BMP

In most cases the the downloaded data is below 50 KB.

How it works

If you are interested in knowing more about how it works I wrote an article you can found on my blog:

"Prefetching images size without downloading them [entirely] inย Swift"

To use it you just need to instantiate (and keep a strong reference) to the ImageSizeFetcher class. It supports a local in-memory cache of the request and has a GCD queue to manage multiple request automatically; you just need to call the sizeFor() method:

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

Unit Tests

Unit tests are available inside the Tests folder.

Requirements

ImageSizeFetcher is compatible with Swift 4.x.

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

Issues & Contributions

Please open an issue here on GitHub if you have a problem, suggestion, or other comment. Pull requests are welcome and encouraged.

Installation

Install via CocoaPods

CocoaPods is a dependency manager which automates and simplifies the process of using 3rd-party libraries like ImageSizeFetcher in your projects. You can install it with the following command:

$ sudo gem install cocoapods

CocoaPods 1.0.1+ is required to build ImageSizeFetcher.

Install via Podfile

To integrate ImageSizeFetcher into your Xcode project using CocoaPods, specify it in your Podfile:

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

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

Then, run the following command:

$ pod install

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate ImageSizeFetcher into your Xcode project using Carthage, specify it in your Cartfile:

github "malcommac/ImageSizeFetcher"

Run carthage to build the framework and drag the built ImageSizeFetcher.framework into your Xcode project.

Copyright

ImageSizeFetcher is available under the MIT license. See the LICENSE file for more info.

Daniele Margutti: [email protected]

Twitter: @danielemargutti

More Repositories

1

SwiftDate

๐Ÿ” Toolkit to parse, validate, manipulate, compare and display dates, time & timezones in Swift.
Swift
7,500
star
2

SwiftLocation

โš“๏ธ Async/Await CLLocationManager Wrapper for Apple Platforms
Swift
3,334
star
3

SwiftRichString

๐Ÿ‘ฉโ€๐ŸŽจ Elegant Attributed String composition in Swift sauce
Swift
3,046
star
4

Hydra

โšก๏ธ Lightweight full-featured Promises, Async & Await Library in Swift
Swift
1,971
star
5

Repeat

๐Ÿ•ฆ Modern Timer in Swift, Debouncer and Throttler (alternative to NSTimer) made with GCD
Swift
1,456
star
6

UIWindowTransitions

๐Ÿƒโ€โ™‚๏ธ Animated transitions for UIWindow's rootViewController property
Swift
465
star
7

Owl

A declarative type-safe framework for building fast and flexible lists with UITableViews & UICollectionViews
Swift
434
star
8

ScrollStackController

๐Ÿงฉ Easy scrollable layouts in UIKit - an UIStackView which scroll and uses root views of child view controllers.
Swift
426
star
9

Flow

Declarative approach to populate and manage UITableViews (see https://github.com/malcommac/FlowKit)
Swift
423
star
10

SwiftSimplify

๐Ÿฅท High-performance polyline simplification library - port of simplify.js
Swift
293
star
11

DMLazyScrollView

Lazy Loading UIScrollView for iOS (with support for infinite scrolling)
Objective-C
293
star
12

DMPagerViewController

DMPagerViewController is page navigation controller like the one used in Twitter or Tinder
Objective-C
278
star
13

FlowKit

A declarative type-safe framework for building fast and flexible list with Tables & Collection
Swift
211
star
14

DMCircularScrollView

Infinite/Circular Scrolling Implementation for UIScrollView
Objective-C
205
star
15

ScrollingStackContainer

Efficient Scrolling UIStackView in Swift - DEPRECATED (use ScrollStackController)
Swift
198
star
16

SwiftScanner

String Scanner in pure Swift (supports unicode)
Swift
171
star
17

SwiftMsgPack

๐Ÿ’ฌ Fast & Lightweight MsgPack Serializer & Deserializer for Swift
Swift
154
star
18

DMSlidingCell

Swipe To Reveal UITableViewCell Implementation as like in Twitter
Objective-C
152
star
19

DMSplitView

New NSSplitView class with multiple subviews resize behaviors and animated transitions
Objective-C
116
star
20

DMScrollingTicker

Advanced horizontal scrolling ticker for iOS
Objective-C
110
star
21

DMDynamicWaterfall

UICollectionView Waterfall Layout with UIKit Dynamics
Objective-C
109
star
22

DMTabBar

XCode 4.x like inspector segmented control
Objective-C
108
star
23

HermesNetwork

Swift
73
star
24

DMInspectorPalette

Animated NSScrollView with collapsible sections like in XCode Inspector
Objective-C
61
star
25

SwiftUnistroke

โœ๏ธ $1 Unistroke Gesture Recognizer in Swift
Swift
53
star
26

UAParserSwift

๐Ÿ—บ User-Agent Parser based upon ua-parser.js
Swift
39
star
27

DMPageControl

An high customizable alternative to UIPageControl
39
star
28

DMTwitterOAuth

Twitter OAuth Library (Callback URL Login)
Objective-C
37
star
29

DMScrollViewStack

DMScrollViewStack is a UIScrollView subclass that efficiently handles a vertical stack of multiple scrollviews
Objective-C
33
star
30

DMLocationManager

Location Manager for iOS made simple
Objective-C
27
star
31

DMPathBar

XCode's Yosemite like path bar of OS X
Objective-C
25
star
32

Swift-Coding-Guidelines

A repository to collect best practices when programming with Swift
20
star
33

xcbetarunner

Run & Debug projects [easily] with stable Xcode on beta iOSย devices
Swift
17
star
34

GitLabSwift

๐Ÿ›ต Async/Await GitLab REST APIs v4 for Swift
Swift
14
star
35

DMCacheBox

Fast advanced caching system for Objective-C (Cocoa/iOS compatible)
Objective-C
14
star
36

RealEventsBus

๐ŸšŽ Simple type-safe event bus implementation in swift
Swift
13
star
37

DMMultiDelegatesProxy

Multiple delegate architecture made using NSProxy
Objective-C
10
star
38

Glider-Old

โœˆ๏ธ Fast & powerful logger for Swift
Swift
9
star
39

NSSplitView-Animatable

NSSplitView Category to perform simple animations with dividers
Objective-C
9
star
40

CircularScroller

Efficient and Lightweight endless UIScrollView implementation in Swift
Swift
7
star
41

DMAPNServer

APN - Apple Push Notification Server in PHP
PHP
6
star
42

DMCoreDataUtils

Utilities methods for Apple's Core Data Storage
Objective-C
6
star
43

SlidingSheet

Configurable Bottom Sheet for UIKit - like AirBnb and Apple Maps
Swift
4
star
44

sentry-cocoa-sdk-xcframeworks

A mirror for https://github.com/getsentry/sentry-cocoa to add support for binary (xcframework) distribution with swift package manager.
Shell
4
star
45

CAKeyFrameAnimation-Evaluators

Easily specify CAKeyFrameAnimation curves using C functions or ObjC Class
Objective-C
3
star
46

ZoomableListController

Apple's iOS Weather App List Imitation written in Swift
Swift
2
star
47

MeetingBot

Your next call on Mac status bar
Swift
2
star
48

Konsole

In-app Swift tools for great iOS developers
1
star
49

DMGrid

A simple 2D Grid class made in Objective-C
Objective-C
1
star
50

Envy

Type safe environment variables from shell processes and .env files
1
star
51

DifferenceKit

๐Ÿ’ป A fast and flexible O(n) difference algorithm framework for Swift collection.
Swift
1
star