호댕의 iOS 개발

[iOS] 이미지의 크기 자체를 줄이고 싶다면? 본문

Software Engineering/iOS

[iOS] 이미지의 크기 자체를 줄이고 싶다면?

호르댕댕댕 2022. 1. 22. 15:45

캡쳐를 할 수 있는 도구나 gif 편집 도구를 보면 다음과 같은 것들을 볼 수 있다.

Gifski 앱을 캡쳐한 화면입니다.

 

 

위 사진처럼 이미지를 자르지 않고 비율 그대로 이미지의 크기만 줄이고 싶다면 어떻게 해야할까?

일단 코드를 먼저 살펴보자. 

 

extension UIImage {
    func resize(multiplier: CGFloat) -> UIImage {
        let newWidth = self.size.width * multiplier
        let newheight = self.size.height * multiplier
        let size = CGSize(width: newWidth, height: newheight)
        let render = UIGraphicsImageRenderer(size: size)
        let renderImage = render.image { _ in
            draw(in: CGRect(origin: .zero, size: size))
        }
        return renderImage
    }
}

UIImage의 크기를 줄이고 싶기 때문에 UIImage의 extension으로 구현했다. 

또한 배율을 정해주고 싶어 매개변수로 multiplier를 받았다. 

 

이를 통해 원래 size의 height과 width에 각각 multiplier를 곱해주었다. 이렇게 된다면 높이와 너비 모두 일정한 비율로 사이즈를 조정할 수 있기 때문이다. 

 

이렇게 곱한 값을 통해 CGSize(width:height:)를 잡아주었다. 

그리고 이를 크기에 맞춰 렌더링을 해줘야 하는데 이때 사용할 수 있는 것이 바로 UIGraphicsImageRenderer이다.

 

UIGraphicsImageRenderer

Core Graphics를 지원하는 이미지를 생성하는 그래픽 랜더러이다. 

이를 사용하여 색상의 깊이, 이미지의 배율과 같은 것들을 처리해줄 수 있고 CoreGraphics의 context를 관리하지 않고도 이미지를 생성할 수 있다. 

 

또한 이렇게 그린 이미지를 image(actions:) 메서드를 사용해 생성할 수 있다. 

(UIGraphicsImageRendererContext) -> Void

매개변수에는 다음과 같은 형식의 클로저가 들어가야 하기 때문에 일정한 크기의 이미지를 그려주는 draw(in:) 메서드를 사용했고 이를 통해 생성된 이미지를 반환하는 방법으로 이미지의 크기를 줄였다. 

 

 

 

이것 외에도 이미지의 크기를 줄이는 방법들이 다양하게 존재하던데 일단 이번에는 UIGraphicsImageRenderer를 사용하여 크기를 조정하는 방법에 대해 알아봤다. 

Comments