В Swift существует несколько методов преобразования изображения в оттенки серого. Вот несколько подходов:
-
Базовый фильтр изображения.
Вы можете использовать платформу базового изображения, чтобы применить к изображению фильтр оттенков серого. Вот пример: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, эффективно удаляя цвет и получая изображение в оттенках серого.
-
Ручная обработка пикселей.
Другой подход заключается в ручном манипулировании пикселями изображения для преобразования его в оттенки серого. Вот пример: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()
, а затем рисует исходное изображение в этом контексте. -
Использование библиотек обработки изображений.
Для Swift также доступно несколько сторонних библиотек обработки изображений, которые предоставляют готовые функции для преобразования изображений в оттенки серого. Некоторые популярные из них:- AlamofireImage
- Зимородок
- SDWebImage
Эти библиотеки предлагают удобные методы обработки и манипулирования изображениями, включая преобразование в оттенки серого.