swift-vibrant
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])->PaletteFilter
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.