47 lines
1.5 KiB
Swift
47 lines
1.5 KiB
Swift
//
|
|
// WebPSerializer.swift
|
|
// Pods
|
|
//
|
|
// Created by yeatse on 2016/10/20.
|
|
//
|
|
//
|
|
|
|
import CoreGraphics
|
|
import Foundation
|
|
import Kingfisher
|
|
|
|
public struct WebPSerializer: CacheSerializer {
|
|
public static let `default` = WebPSerializer()
|
|
|
|
/// Whether the image should be serialized in a lossy format. Default is false.
|
|
public var isLossy: Bool = false
|
|
|
|
/// The compression quality when converting image to a lossy format data. Default is 1.0.
|
|
public var compressionQuality: CGFloat = 1.0
|
|
|
|
/// See ```CacheSerializer/originalDataUsed```
|
|
public var originalDataUsed: Bool = true
|
|
|
|
private init() {}
|
|
|
|
public func data(with image: KFCrossPlatformImage, original: Data?) -> Data? {
|
|
if originalDataUsed {
|
|
if let original = original {
|
|
return original
|
|
}
|
|
if let frameData = image.kf.frameSource?.data {
|
|
return frameData
|
|
}
|
|
}
|
|
if let original = original, !original.isWebPFormat {
|
|
return DefaultCacheSerializer.default.data(with: image, original: original)
|
|
}
|
|
let qualityInWebp = min(max(0, compressionQuality), 1) * 100
|
|
return image.kf.normalized.kf.webpRepresentation(isLossy: isLossy, quality: Float(qualityInWebp))
|
|
}
|
|
|
|
public func image(with data: Data, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? {
|
|
return WebPProcessor.default.process(item: .data(data), options: options)
|
|
}
|
|
}
|