40 lines
1.1 KiB
Swift
40 lines
1.1 KiB
Swift
// Copyright 2024-present 650 Industries. All rights reserved.
|
|
|
|
import SDWebImage
|
|
|
|
internal final class PSDCoder: NSObject, SDImageCoder {
|
|
nonisolated(unsafe) static let shared = PSDCoder()
|
|
|
|
func canDecode(from data: Data?) -> Bool {
|
|
guard let data, data.count >= 4 else {
|
|
return false
|
|
}
|
|
|
|
// verify PSD magic bytes
|
|
let signatureData = data[0..<4]
|
|
let signature = String(data: signatureData, encoding: .ascii)
|
|
return signature == "8BPS"
|
|
}
|
|
|
|
func decodedImage(with data: Data?, options: [SDImageCoderOption : Any]? = nil) -> UIImage? {
|
|
guard let data else {
|
|
return nil
|
|
}
|
|
|
|
if let scale = options?[SDImageCoderOption.decodeScaleFactor] as? CGFloat {
|
|
return UIImage(data: data, scale: scale)
|
|
}
|
|
|
|
// UIImage is able to directly handle PSD data
|
|
return UIImage(data: data)
|
|
}
|
|
|
|
func canEncode(to format: SDImageFormat) -> Bool {
|
|
return false
|
|
}
|
|
|
|
func encodedData(with image: UIImage?, format: SDImageFormat, options: [SDImageCoderOption : Any]? = nil) -> Data? {
|
|
return nil
|
|
}
|
|
}
|