diff --git a/Sora/Managers/ImageUpscaler.swift b/Sora/Managers/ImageUpscaler.swift index 25dbf15..70643d8 100644 --- a/Sora/Managers/ImageUpscaler.swift +++ b/Sora/Managers/ImageUpscaler.swift @@ -42,12 +42,9 @@ public struct LanczosUpscaleProcessor: ImageProcessor { public let sharpeningIntensity: Float public let sharpeningRadius: Float public var identifier: String { - "me.cranci.lanczos_\(scale)_sharp_\(sharpeningIntensity)_\(sharpeningRadius)" + "com.yourapp.lanczos_\(scale)_sharp_\(sharpeningIntensity)_\(sharpeningRadius)" } - // Reuse CIContext - private static let ciContext = CIContext(options: nil) - public init( scale: CGFloat, sharpeningIntensity: Float = 0.7, @@ -62,31 +59,40 @@ public struct LanczosUpscaleProcessor: ImageProcessor { item: ImageProcessItem, options: KingfisherParsedOptionsInfo ) -> KFCrossPlatformImage? { - 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 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 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 } - - let unsharp = CIFilter.unsharpMask() - unsharp.inputImage = scaledCI - unsharp.intensity = sharpeningIntensity - unsharp.radius = sharpeningRadius - guard let sharpCI = unsharp.outputImage else { - return KFCrossPlatformImage(ciImage: scaledCI) + scaleFilter.inputImage = ciInput + scaleFilter.scale = Float(scale) + scaleFilter.aspectRatio = 1.0 + guard let scaledCI = scaleFilter.outputImage else { + return uiImage } - guard let outputCG = Self.ciContext.createCGImage(sharpCI, from: sharpCI.extent) else { - return KFCrossPlatformImage(ciImage: sharpCI) + let unsharp = CIFilter.unsharpMask() + unsharp.inputImage = scaledCI + unsharp.intensity = sharpeningIntensity + unsharp.radius = sharpeningRadius + guard let sharpCI = unsharp.outputImage else { + return UIImage(ciImage: scaledCI) + } + + let context = CIContext(options: nil) + guard let outputCG = context.createCGImage(sharpCI, from: sharpCI.extent) else { + return UIImage(ciImage: sharpCI) } return KFCrossPlatformImage(cgImage: outputCG) }