일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- xcode
- Navigation
- Failed to register bundle identifier
- SWIFT
- roundingMode
- 아이폰
- 독서후기
- View Life Cycle
- 독후감
- Structures and Classes
- Info.plist
- NotificationCenter
- Codegen
- 스타트업주니어로살아남기
- 부트캠프
- Modality
- 책후기
- Mock
- delegation
- 스위프트
- human interface guidelines
- IOS
- 야곰아카데미
- mvvm
- contentInset
- NumberFormatter
- UIResponder
- viewcontroller
- SWIFTUI
- @available
- Today
- Total
호댕의 iOS 개발
[iOS] 이미지의 크기 자체를 줄이고 싶다면? 본문
캡쳐를 할 수 있는 도구나 gif 편집 도구를 보면 다음과 같은 것들을 볼 수 있다.
위 사진처럼 이미지를 자르지 않고 비율 그대로 이미지의 크기만 줄이고 싶다면 어떻게 해야할까?
일단 코드를 먼저 살펴보자.
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를 사용하여 크기를 조정하는 방법에 대해 알아봤다.
'Software Engineering > iOS' 카테고리의 다른 글
[iOS] TextField의 테두리에 색깔 넣기(조건이 안 맞는 경우만!) (0) | 2022.01.24 |
---|---|
[iOS] Keychain (0) | 2022.01.23 |
[iOS] 이미지를 받고, 이미지의 크기를 크롭하기 (0) | 2022.01.22 |
[iOS] FileManager를 통해 파일을 생성해보자. (0) | 2022.01.10 |
[라이브러리] SwiftLint를 사용해봅시다~ (1) | 2022.01.08 |