[swift] 이미지 픽셀 값 조정하기

이미지 픽셀 값을 조정하는 것은 이미지 처리 작업에서 매우 중요합니다. 예를 들어, 이미지를 밝게 하거나 어둡게 만들거나, 색상을 조정하는 등의 작업을 할 수 있습니다. 이번 글에서는 Swift를 사용하여 이미지 픽셀 값을 조정하는 방법에 대해 알아보겠습니다.

이미지 로드하기

먼저, 이미지를 로드해야 합니다. Swift에서는 UIImage 클래스를 사용하여 이미지를 로드할 수 있습니다. 아래 예제 코드에서는 image 변수에 이미지를 할당하는 방법을 보여줍니다.

import UIKit

let image = UIImage(named: "example_image.jpg")

위 코드에서 "example_image.jpg"는 로드할 이미지 파일의 경로입니다. 앱 번들에 이미지가 포함되어 있다면, 파일 이름만 사용하여 이미지를 로드할 수 있습니다.

이미지 픽셀 값 변경하기

이미지를 표현하는 UIImage 객체는 CGImage 객체를 내부적으로 갖고 있습니다. 이 CGImage 객체를 사용하여 이미지의 픽셀 값을 변경할 수 있습니다. 아래 예제 코드에서는 이미지의 픽셀 값을 0.5만큼 밝게 조정하는 방법을 보여줍니다.

guard let cgImage = image?.cgImage else {
    return
}

let width = cgImage.width
let height = cgImage.height
let bytesPerPixel = 4
let bytesPerRow = bytesPerPixel * width
let bitsPerComponent = 8
let imageData = UnsafeMutablePointer<UInt8>.allocate(capacity: width * height * bytesPerPixel)

let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipLast.rawValue)

let context = CGContext(data: imageData,
                        width: width,
                        height: height,
                        bitsPerComponent: bitsPerComponent,
                        bytesPerRow: bytesPerRow,
                        space: colorSpace,
                        bitmapInfo: bitmapInfo.rawValue)

context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height))
let pixelCount = width * height

for i in 0..<pixelCount {
    let index = i * bytesPerPixel
    let r = imageData[index]
    let g = imageData[index + 1]
    let b = imageData[index + 2]
    
    let adjustedR = UInt8(min(Double(r) * 1.5, 255.0))
    let adjustedG = UInt8(min(Double(g) * 1.5, 255.0))
    let adjustedB = UInt8(min(Double(b) * 1.5, 255.0))
    
    imageData[index] = adjustedR
    imageData[index + 1] = adjustedG
    imageData[index + 2] = adjustedB
}

let outputData = context?.data
let outputCGImage = CGBitmapContextCreateImage(context)
let outputImage = UIImage(cgImage: outputCGImage!)

위 코드에서는 이미지의 각 픽셀을 순회하면서 해당 픽셀의 Red, Green, Blue 값을 가져온 후 1.5를 곱해 밝기를 증가시킵니다. 그러고 나서 새로운 픽셀 값들을 이미지에 적용하여 출력 이미지를 생성합니다.

이미지 저장하기

픽셀 값 조정이 완료된 이미지를 저장해보겠습니다. UIImage 클래스를 사용하여 이미지를 저장할 수 있습니다. 아래 예제 코드에서는 조정된 이미지를 “output_image.jpg”라는 파일로 저장하는 방법을 보여줍니다.

if let data = outputImage.jpegData(compressionQuality: 1.0) {
    let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("output_image.jpg")
    try? data.write(to: fileURL)
}

위 코드에서는 jpegData(compressionQuality:) 메서드를 사용하여 이미지 데이터를 Data 객체로 변환한 후, FileManager 클래스를 사용하여 해당 데이터를 지정된 파일 경로에 저장합니다.

결론

Swift를 사용하여 이미지 픽셀 값을 조정하는 방법에 대해 알아보았습니다. 이미지 픽셀 값을 변경하여 밝기, 색상 등을 조절할 수 있습니다. 이를 통해 이미지 처리 작업을 쉽게 수행할 수 있습니다. 위 예제 코드를 사용하여 이미지 픽셀 값을 조정해보고 다양한 이미지 처리 작업을 시도해보세요.