import UIKit import SwiftSignalKit import Display import WebPBinding private func scaleImage(_ image: UIImage, size: CGSize, boundiingSize: CGSize) -> UIImage? { let format = UIGraphicsImageRendererFormat() format.scale = 1.0 let renderer = UIGraphicsImageRenderer(size: size, format: format) return renderer.image { _ in image.draw(in: CGRect(origin: .zero, size: size)) } } func convertToWebP(image: UIImage, targetSize: CGSize?, targetBoundingSize: CGSize?, quality: CGFloat) -> Signal { var image = image if let targetSize = targetSize, let scaledImage = scaleImage(image, size: targetSize, boundiingSize: targetSize) { image = scaledImage } return Signal { subscriber in if let data = try? WebP.convert(toWebP: image, quality: quality * 100.0) { subscriber.putNext(data) } subscriber.putCompletion() return EmptyDisposable } |> runOn(Queue.concurrentDefaultQueue()) }