[swift] 이미지 크기 조정과 리사이징하는 방법

이미지를 웹사이트나 애플리케이션에서 사용할 때, 이미지 크기를 조정하거나 리사이징할 필요가 있습니다. 큰 이미지를 사용하면 페이지 로딩 시간이 길어지고, 작은 이미지는 화면에 깨지거나 픽셀이 잘려 보일 수 있습니다. 따라서 이미지 크기를 조절하여 최적의 화질과 파일 크기를 유지하는 것이 중요합니다.

1. 이미지 크기 조정하기

다음은 Swift에서 이미지 크기를 조정하는 예시 코드입니다.

import UIKit

func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
    let size = image.size
    
    let widthRatio  = targetSize.width  / size.width
    let heightRatio = targetSize.height / size.height

    let newSize: CGSize
    if widthRatio > heightRatio {
        newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
    } else {
        newSize = CGSize(width: size.width * widthRatio,  height: size.height * widthRatio)
    }

    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)

    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
    image.draw(in: rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
}

let originalImage = UIImage(named: "original_image.jpg")
let resizedImage = resizeImage(image: originalImage!, targetSize: CGSize(width: 200, height: 200))

위의 코드는 resizeImage라는 함수를 정의하고, 해당 함수를 사용하여 이미지를 리사이징합니다. targetSize 매개변수로 리사이징할 이미지의 크기를 지정하고, UIImage 객체를 반환합니다. 이 함수는 이미지의 가로, 세로 비율을 유지하며 targetSize에 맞게 이미지를 조정합니다.

2. 이미지 리사이징하기

이미지를 리사이징하여 파일 크기를 줄이기 위해서는 압축을 사용해야 합니다. Swift에서 이미지를 압축하여 리사이징하는 방법은 다음과 같습니다.

import UIKit

func resizeAndCompressImage(image: UIImage, quality: CGFloat) -> Data? {
    let resizedImage = resizeImage(image: image, targetSize: CGSize(width: 200, height: 200))
    
    return resizedImage.jpegData(compressionQuality: quality)
}

let originalImage = UIImage(named: "original_image.jpg")
let compressedData = resizeAndCompressImage(image: originalImage!, quality: 0.8)

위의 코드에서는 resizeAndCompressImage 함수를 사용하여 이미지를 리사이징하고 압축합니다. quality 매개변수로 압축 품질을 설정하며, 리사이징된 이미지를 jpegData 메서드를 사용하여 Data 타입으로 변환합니다.

3. 참고 자료

위의 코드와 참고 자료를 참고하여 이미지 크기 조정과 리사이징을 구현해 보세요. 이미지의 크기를 최적화하여 웹사이트나 애플리케이션의 성능을 향상시킬 수 있습니다.