mirror of
https://github.com/cranci1/Sora.git
synced 2026-04-07 10:09:26 +00:00
upscaler fixes?
This commit is contained in:
parent
84215ac49b
commit
a84dacded1
1 changed files with 21 additions and 27 deletions
|
|
@ -42,9 +42,12 @@ public struct LanczosUpscaleProcessor: ImageProcessor {
|
|||
public let sharpeningIntensity: Float
|
||||
public let sharpeningRadius: Float
|
||||
public var identifier: String {
|
||||
"com.yourapp.lanczos_\(scale)_sharp_\(sharpeningIntensity)_\(sharpeningRadius)"
|
||||
"me.cranci.lanczos_\(scale)_sharp_\(sharpeningIntensity)_\(sharpeningRadius)"
|
||||
}
|
||||
|
||||
// Reuse CIContext
|
||||
private static let ciContext = CIContext(options: nil)
|
||||
|
||||
public init(
|
||||
scale: CGFloat,
|
||||
sharpeningIntensity: Float = 0.7,
|
||||
|
|
@ -59,40 +62,31 @@ public struct LanczosUpscaleProcessor: ImageProcessor {
|
|||
item: ImageProcessItem,
|
||||
options: KingfisherParsedOptionsInfo
|
||||
) -> KFCrossPlatformImage? {
|
||||
|
||||
let inputImage: KFCrossPlatformImage?
|
||||
switch item {
|
||||
case .image(let image):
|
||||
inputImage = image
|
||||
case .data(let data):
|
||||
inputImage = KFCrossPlatformImage(data: data)
|
||||
}
|
||||
guard let uiImage = inputImage,
|
||||
let cgImage = uiImage.cgImage else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let uiImage: KFCrossPlatformImage? = {
|
||||
switch item {
|
||||
case .image(let image): return image
|
||||
case .data(let data): return KFCrossPlatformImage(data: data)
|
||||
}
|
||||
}()
|
||||
guard let cgImage = uiImage?.cgImage else { return nil }
|
||||
let ciInput = CIImage(cgImage: cgImage)
|
||||
|
||||
let scaleFilter = CIFilter.lanczosScaleTransform()
|
||||
scaleFilter.inputImage = ciInput
|
||||
scaleFilter.scale = Float(scale)
|
||||
scaleFilter.aspectRatio = 1.0
|
||||
guard let scaledCI = scaleFilter.outputImage else {
|
||||
return uiImage
|
||||
}
|
||||
scaleFilter.inputImage = ciInput
|
||||
scaleFilter.scale = Float(scale)
|
||||
scaleFilter.aspectRatio = 1.0
|
||||
guard let scaledCI = scaleFilter.outputImage else { return uiImage }
|
||||
|
||||
let unsharp = CIFilter.unsharpMask()
|
||||
unsharp.inputImage = scaledCI
|
||||
unsharp.intensity = sharpeningIntensity
|
||||
unsharp.radius = sharpeningRadius
|
||||
unsharp.inputImage = scaledCI
|
||||
unsharp.intensity = sharpeningIntensity
|
||||
unsharp.radius = sharpeningRadius
|
||||
guard let sharpCI = unsharp.outputImage else {
|
||||
return UIImage(ciImage: scaledCI)
|
||||
return KFCrossPlatformImage(ciImage: scaledCI)
|
||||
}
|
||||
|
||||
let context = CIContext(options: nil)
|
||||
guard let outputCG = context.createCGImage(sharpCI, from: sharpCI.extent) else {
|
||||
return UIImage(ciImage: sharpCI)
|
||||
guard let outputCG = Self.ciContext.createCGImage(sharpCI, from: sharpCI.extent) else {
|
||||
return KFCrossPlatformImage(ciImage: sharpCI)
|
||||
}
|
||||
return KFCrossPlatformImage(cgImage: outputCG)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue