CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 months to go.

swift-vibrant 1.0.0

swift-vibrant 1.0.0

Maintained by Bryce Dougherty.



  • By
  • Bryce Dougherty

swift-vibrant

CI Status Version License Platform

Installation

swift-vibrant is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'swift-vibrant'

Usage

import swiftVibrant

let image = UIImage(named: "name_of_image")

// Calling from a background thread
Vibrant.from(image).getPalette({ palette in 
    // do stuff with your palette
})
// Calling in main thread
Vibrant.from(image).getPalette()
/// do stuff with your palette here

// Using constructor
let v = Vibrant(image, Vibrant.Options)
v.getPalette({ palette in 
    // do stuff with your palette
})

References

Vibrant

Main class of swift-vibrant.

Vibrant.from(src: UIImage): Builder

Make a Builder for an image. Returns a Builder instance.

constructor(src: UIImage, opts: Vibrant.Options)

Name Description
image Your UIImage instance
opts Options (optional)
Options
public struct Options {
       var colorCount: Int = 64
       var quality: Int = 5
       var quantizer: Quantizer.quantizer
       var generator: Generator.generator
       var maxDimension: CGFloat?
       var filters: [Filter]
   }
Field Default Description
colorCount 64 amount of colors in initial palette from which the swatches will be generated
quality 5 Scale down factor used in downsampling stage. 1 means no downsampling. If maxDimension is set, this value will not be used.
quantizer Quantizer.defaultQuantizer A Quantizer function
generator Generator.defaultGenerator An Generator function
maxDimension nil The max size of the image's longer side used in downsampling stage. This field will override quality.
filters [] An array of Filter
quantizer
public typealias quantizer = (_ pixels: [UInt8], _ options: Vibrant.Options)->[Swatch]
generator
public typealias generator = (_ swatches: [Swatch])->Palette
Filter

Returns true if the color is to be kept.

public class Filter {
    public typealias filterFunction = (_ red: UInt8, _ green: UInt8, _ blue: UInt8, _ alpha: UInt8)->Bool
    
    var f: filterFunction
}

getPalette(cb: (Palette)->Void)

Name Description
cb callback function.

Vibrant.Builder

Helper class for change configurations and create a Vibrant instance. Methods of a Builder instance can be chained like:

Vibrant.from(src)
  .quality(1)
  .clearFilters()
  // ...
  .getPalette()

constructor(src: UIImage, opts: Vibrant.Options)

Arguments are the same as Vibrant.constructor.

quality(q: Int): Builder

Sets opts.quality to q. Returns this Builder instance.

maxColorCount(n: Int): Builder

Sets opts.colorCount to n. Returns this Builder instance.

maxDimension(d: Int): Builder

Sets opts.maxDimension to d. Returns this Builder instance.

addFilter(f: Filter): Builder

Adds a filter function. Returns this Builder instance.

removeFilter(f: Filter): Builder

Removes a filter function. Returns this Builder instance.

clearFilters(): Builder

Clear all filters. Returns this Builder instance.

useQuantizer(quantizer: Quantizer.quantizer): Builder

Specifies which Quantizer implementation class to use. Returns this Builder instance.

useGenerator(generator: Generator.generator): Builder

Sets opts.generator to generator. Returns this Builder instance.

build(): Vibrant

Builds and returns a Vibrant instance as configured.

getPalette(cb: (Palette)->Void)

Builds a Vibrant instance as configured and calls its getPalette method on a background thread. Calls cb on main thread.

getPalette()->Palette

Builds a Vibrant instance as configured and calls its getPalette method on the main thread.

Vibrant.Swatch

Represents a color swatch generated from an image's palette.

Vec3

public typealias Vec3<T> = (T, T, T)

RGB

public typealias RGB = (r: UInt8, g: UInt8, b: UInt8)

HSL

public typealias HSL = (r: Double, g: Double, b: Double)

XYZ

public typealias HSL = (r: Double, g: Double, b: Double)

LAB

public typealias HSL = (r: Double, g: Double, b: Double)

constructor(rgb: RGB, population: Int)

Internal use.

Name Description
rgb [r, g, b]
population Population of the color in an image

hsl: HSL

getPopulation(): Int

rgb: RGB

hex: String

Returns a hexadecimal value of the swatch

getTitleTextColor(): UIColor

Returns an appropriate color to use for any 'title' text which is displayed over this Swatch's color.

getBodyTextColor(): UIColor

Returns an appropriate color to use for any 'body' text which is displayed over this Swatch's color.

Vibrant.Util

Utility methods. Internal usage.

hexToRgb(hex: string): RGB

rgbToHex(r: UInt8, g: UInt8, b: UInt8): String

hslToRgb(h: Double, s: Double, l: Double): RGB

rgbToHsl(r: UInt8, g: UInt8, b: UInt8): HSL

xyzToRgb(x: Double, y: Double, z: Double): RGB

rgbToXyz(r: UInt8, g: UInt8, b: UInt8): XYZ

xyzToCIELab(x: Double, y: Double, z: Double): LAB

rgbToCIELab(l: UInt8, a: UInt8, b: UInt8): LAB

deltaE94(lab1: Double, lab2: Double): Double

Computes CIE delta E 1994 diff between lab1 and lab2. The 2 colors are in CIE-Lab color space. Used in tests to compare 2 colors' perceptual similarity.

rgbDiff(rgb1: RGB, rgb2: RGB): Double

Compute CIE delta E 1994 diff between rgb1 and rgb2.

hexDiff(hex1: string, hex2: string): Double

Compute CIE delta E 1994 diff between hex1 and hex2.

getColorDiffStatus(d: number): string

Gets a string to describe the meaning of the color diff. Used in tests.

Delta E Perception Returns
<= 1.0 Not perceptible by human eyes. "Perfect"
1 - 2 Perceptible through close observation. "Close"
2 - 10 Perceptible at a glance. "Good"
11 - 49 Colors are more similar than opposite "Similar"
50 - 100 Colors are exact opposite Wrong

Notes

  • This library uses code from ColorThiefSwift, mostly borrowing from their implementation of the modified median cut quantization (MMCQ) algorithm
  • A majority of the rest was adapted from node-vibrant

Author

Bryce Dougherty: [email protected]

Credits

Kazuki Ohara: ColorThiefSwift

Jari Zwarts: node-vibrant

License

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