upscaler fixes?

This commit is contained in:
Francesco 2025-05-31 22:22:06 +02:00
parent 84215ac49b
commit a84dacded1

View file

@ -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)
}