Files
Fluxup_PAP/node_modules/expo-image/ios/Coders/WebPCoder.swift
2026-03-10 16:18:05 +00:00

74 lines
2.3 KiB
Swift

// Copyright 2015-present 650 Industries. All rights reserved.
import SDWebImage
import SDWebImageWebPCoder
internal let imageCoderOptionUseAppleWebpCodec = SDImageCoderOption(rawValue: "useAppleWebpCodec")
/**
A composite WebP coder that uses either `SDImageAWebPCoder` or `SDImageWebPCoder`
based on the passed `imageCoderOptionUseAppleWebpCodec` option.
*/
internal final class WebPCoder: NSObject, SDAnimatedImageCoder {
nonisolated(unsafe) static let shared = WebPCoder()
private var useAppleWebpCodec: Bool = true
private var instantiatedCoder: SDAnimatedImageCoder?
private var coder: SDAnimatedImageCoder {
if let instantiatedCoder {
return instantiatedCoder
}
return self.useAppleWebpCodec ? SDImageAWebPCoder.shared : SDImageWebPCoder.shared
}
override init() {
super.init()
}
// MARK: - SDAnimatedImageCoder implementations
convenience init(animatedImageData data: Data?, options: [SDImageCoderOption: Any]? = nil) {
self.init()
self.useAppleWebpCodec = options?[imageCoderOptionUseAppleWebpCodec] as? Bool ?? true
self.instantiatedCoder = self.useAppleWebpCodec
? SDImageAWebPCoder.init(animatedImageData: data, options: options)
: SDImageWebPCoder.init(animatedImageData: data, options: options)
}
func canDecode(from data: Data?) -> Bool {
return self.coder.canDecode(from: data)
}
func decodedImage(with data: Data?, options: [SDImageCoderOption: Any]? = nil) -> UIImage? {
return self.coder.decodedImage(with: data, options: options)
}
func canEncode(to format: SDImageFormat) -> Bool {
return self.coder.canEncode(to: format)
}
func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption: Any]? = nil) -> Data? {
return self.coder.encodedData(with: image, format: format, options: options)
}
var animatedImageData: Data? {
return self.coder.animatedImageData
}
var animatedImageFrameCount: UInt {
return self.coder.animatedImageFrameCount
}
var animatedImageLoopCount: UInt {
return self.coder.animatedImageLoopCount
}
func animatedImageFrame(at index: UInt) -> UIImage? {
return self.coder.animatedImageFrame(at: index)
}
func animatedImageDuration(at index: UInt) -> TimeInterval {
return self.coder.animatedImageDuration(at: index)
}
}