Методы преобразования изображений в оттенки серого в Swift: базовое изображение, ручное управление пикселями и библиотеки обработки изображений

В Swift существует несколько методов преобразования изображения в оттенки серого. Вот несколько подходов:

  1. Базовый фильтр изображения.
    Вы можете использовать платформу базового изображения, чтобы применить к изображению фильтр оттенков серого. Вот пример:

    import CoreImage
    func convertToGrayscale(image: UIImage) -> UIImage? {
       guard let ciImage = CIImage(image: image) else { return nil }
       let context = CIContext()
       let filter = CIFilter(name: "CIColorControls")
       filter?.setValue(ciImage, forKey: kCIInputImageKey)
       filter?.setValue(0.0, forKey: kCIInputSaturationKey)
       if let outputImage = filter?.outputImage,
          let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
           return UIImage(cgImage: cgImage)
       }
       return nil
    }

    Этот метод использует фильтр «CIColorControls» и устанавливает значение насыщенности равным 0,0, эффективно удаляя цвет и получая изображение в оттенках серого.

  2. Ручная обработка пикселей.
    Другой подход заключается в ручном манипулировании пикселями изображения для преобразования его в оттенки серого. Вот пример:

    func convertToGrayscale(image: UIImage) -> UIImage? {
       let imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
       let colorSpace = CGColorSpaceCreateDeviceGray()
       let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)
       guard let context = CGContext(data: nil, width: Int(image.size.width), height: Int(image.size.height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) else {
           return nil
       }
       context.draw(image.cgImage!, in: imageRect)
       guard let grayscaleImage = context.makeImage() else { return nil }
       return UIImage(cgImage: grayscaleImage)
    }

    Этот метод создает контекст в оттенках серого с помощью CGColorSpaceCreateDeviceGray(), а затем рисует исходное изображение в этом контексте.

  3. Использование библиотек обработки изображений.
    Для Swift также доступно несколько сторонних библиотек обработки изображений, которые предоставляют готовые функции для преобразования изображений в оттенки серого. Некоторые популярные из них:

    • AlamofireImage
    • Зимородок
    • SDWebImage

    Эти библиотеки предлагают удобные методы обработки и манипулирования изображениями, включая преобразование в оттенки серого.