swift-vibrant
安装
swift-vibrant 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'swift-vibrant'
使用
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
})
参考
Vibrant
swift-vibrant
的主类。
Vibrant.from(src: UIImage): Builder
为图像创建一个 Builder
。返回一个 Builder
实例。
constructor(src: UIImage, opts: Vibrant.Options)
名称 | 描述 |
---|---|
image |
您的 UIImage 实例 |
opts |
选项(可选) |
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]
}
字段 | 默认 | 描述 |
---|---|---|
colorCount |
64 | 生成色卡所需的基础调色板中颜色的数量 |
quality |
5 | 下采样阶段使用的缩放因子。值为 1 表示不进行下采样。如果设置了 maxDimension ,则此值将不会使用。 |
quantizer |
Quantizer.defaultQuantizer |
一个 Quantizer 函数 |
generator |
Generator.defaultGenerator |
一个 Generator 函数 |
maxDimension |
nil |
下采样阶段使用的图像更长边的最大大小。该字段将覆盖 quality 。 |
filters |
[] |
一个 Filter 数组 |
quantizer
public typealias quantizer = (_ pixels: [UInt8], _ options: Vibrant.Options)->[Swatch]
generator
public typealias generator = (_ swatches: [Swatch])->Palette
Filter
如果颜色需要保留,则返回 true
。
public class Filter {
public typealias filterFunction = (_ red: UInt8, _ green: UInt8, _ blue: UInt8, _ alpha: UInt8)->Bool
var f: filterFunction
}
getPalette(cb: (调色板)->Void)
名称 | 描述 |
---|---|
cb |
回调函数。 |
Vibrant.Builder
用于更改配置并创建 Vibrant
实例的辅助类。可以像链一样使用 Builder
实例的方法
Vibrant.from(src)
.quality(1)
.clearFilters()
// ...
.getPalette()
constructor(src: UIImage, opts: Vibrant.Options)
参数与 Vibrant.constructor
相同。
quality(q: Int): Builder
将 opts.quality
设置为 q
。返回此 Builder
实例。
maxColorCount(n: Int): Builder
将 opts.colorCount
设置为 n
。返回此 Builder
实例。
maxDimension(d: Int): Builder
将 opts.maxDimension
设置为 d
。返回此 Builder
实例。
addFilter(f: Filter): Builder
添加一个过滤器函数。返回此 Builder
实例。
removeFilter(f: Filter): Builder
移除一个过滤器函数。返回此 Builder
实例。
clearFilters(): Builder
清除所有过滤器。返回此 Builder
实例。
useQuantizer(quantizer: Quantizer.quantizer): Builder
指定要使用的 Quantizer
实现类。返回此 Builder
实例。
useGenerator(generator: Generator.generator): Builder
将 opts.generator
设置为 generator
。返回此 Builder
实例。
build(): Vibrant
构建并返回配置好的 Vibrant
实例。
getPalette(cb: (Palette)->Void)
配置完成后创建一个 Vibrant
实例,并在后台线程中调用其 getPalette
方法。在主线程上调用 cb
。
getPalette()->Palette
配置完成后创建一个 Vibrant
实例,并在主线程中调用其 getPalette
方法。
Vibrant.Swatch
表示由图像调色板生成的颜色样版。
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)
内部使用。
名称 | 描述 |
---|---|
rgb |
[r, g, b] |
population |
图像中颜色的数量 |
hsl: HSL
getPopulation(): Int
rgb: RGB
hex: String
返回画板色的十六进制值
getTitleTextColor(): UIColor
返回用于在此 Swatch
颜色上的任何 '标题' 文本的适当颜色。
getBodyTextColor(): UIColor
返回用于在本Swatch
颜色之上显示的“body”文本的适当颜色。
Vibrant.Util
实用方法。内部使用。
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
计算CIE delta E 1994的差异,差异在lab1
和lab2
之间。这两种颜色均位于CIE-Lab颜色空间中。在测试中用于比较两种颜色的感知相似性。
rgbDiff(rgb1: RGB, rgb2: RGB): Double
计算rgb1
和rgb2
之间的CIE delta E 1994差异。
hexDiff(hex1: string, hex2: string): 双精度浮点数
计算 hex1
和 hex2
之间的 CIE delta E 1994 差。
getColorDiffStatus(d: 数字): 字符串
获取描述颜色差的字符串。用于测试。
Delta E | 感知 | 返回 |
---|---|---|
<= 1.0 | 人眼无法感知。 | "完美" |
1 - 2 | 通过仔细观察可以感知。 | "接近" |
2 - 10 | 一眼即可感知。 | "良好" |
11 - 49 | 颜色比相反的颜色更相似。 | "相似" |
50 - 100 | 颜色完全相反。 | 错误 |
注释
- 此库使用了 ColorThiefSwift 中的代码,主要参考了他们修改后的中值切割量化 (MMCQ) 算法的实现。
- 其余的大部分代码都是基于 node-vibrant 调整的。
作者
Bryce Dougherty: [email protected]
致谢
Kazuki Ohara: ColorThiefSwift
Jari Zwarts: node-vibrant
许可
swiftVibrant可在MIT许可下使用。更多信息请查看LICENSE文件。