티스토리 뷰
728x90
반응형
내용
- 서버에서
270*270
,360*360
,720*720
으로 리사이징된 이미지를 URL 을 가공해서 가져오기 - 서버로
720*720
이하는 원본, 초과는720*720
으로 리사이징해서 업로드하기
서버에서 270*270
, 720*720
으로 리사이징된 이미지를 URL 을 가공해서 가져오기
- Kingfisher 를 사용해서 UIImageView 를 extension 해서 사용
import UIKit
import Kingfisher
@frozen
enum ResizingImagetype {
case small
case medium
case large
}
extension UIImageView {
/// URL 주소를 가지고 이미지 다운로드.
///
/// type: 리사이징된 이미지를 설정할 수 있음.
/// - small - 270*270
/// - medium - 360*360
/// - large - 720*720
@discardableResult
func updateImage(_ imagePath: String, type: ResizingImagetype = .small) -> Bool {
// ✅ find period index.
guard let periodIndex = imagePath.lastIndex(of: ".") else {
self.image = UIImage()
return false
}
// https://xxx.xxx.xxx
let imageURL = imagePath[imagePath.startIndex..<periodIndex]
// .png?alt=media or .jpeg?alt=media
let imageType = imagePath[periodIndex..<imagePath.endIndex]
// https://xxx.xxx.xxx_270x270.png?alt=media
let resizingURL: String
switch type {
case .small:
resizingURL = imageURL + "_270x270" + imageType
case .medium:
resizingURL = imageURL + "_360x360" + imageType
case .large:
resizingURL = imageURL + "_720x720" + imageType
}
guard let url = URL(string: resizingURL) else {
self.image = UIImage()
return false
}
// ✅ use Kingfisher to set image.
self.kf.indicatorType = .none
self.kf.setImage(
with: url,
placeholder: UIImage(named: "placeholder"),
options: [
.scaleFactor(UIScreen.main.scale),
.transition(.fade(0.3)),
.cacheOriginalImage
]) { result in
switch result {
case .success:
return
case .failure(let error):
print("kingfisher work failed: \(error.localizedDescription)")
}
}
return true
}
}
서버로 720
이하는 원본, 초과는 720
으로 리사이징하기
extension UIImage {
/// 이미지의 용량을 줄이기 위해서 리사이즈.
/// - 가로, 세로 중 짧은 것이 720 보다 작다면 그대로 반환.
/// - 가로, 세로 중 짧은 것이 720 보다 크다면 720 으로 리사이즈해서 반환.
func resize() -> UIImage {
let width = self.size.width
let height = self.size.height
let resizeLength: CGFloat = 720.0
var scale: CGFloat
if height >= width {
scale = width <= resizeLength ? 1 : resizeLength / width
} else {
scale = height <= resizeLength ? 1 :resizeLength / height
}
let newHeight = height * scale
let newWidth = width * scale
let size = CGSize(width: newWidth, height: newHeight)
let render = UIGraphicsImageRenderer(size: size)
let renderImage = render.image { _ in
self.draw(in: CGRect(origin: .zero, size: size))
}
return renderImage
}
}
참고:
728x90
반응형
'iOS' 카테고리의 다른 글
iOS) 익스텐션(Extension)이란? (0) | 2022.04.14 |
---|---|
iOS) 유니버셜 링크 적용하기 (0) | 2022.04.13 |
iOS) UITableView 에서 헤더 고정 해제하기 (0) | 2022.04.02 |
iOS) SFSafariViewController 사용해서 인앱에서 웹 연결 (0) | 2022.03.17 |
iOS) 인앱에서 mail 보내기 - MFMailComposeViewController (0) | 2022.03.16 |
댓글
TAG
- Protocol
- MVVM
- Algorithm
- MOYA
- 서버통신
- SwiftUI
- async/await
- APNS
- urlsession
- rxswift
- 2022 KAKAO TECH INTERNSHIP
- containerBackground
- configurable widget
- YPImagePicker
- WWDC22
- Notification
- Widget
- Swift
- WidgetKit
- github
- WWDC
- Firebase
- projectsetting
- CloneCoding
- UserDefaults
- watchOS
- IOS
- Objective-C
- RxCocoa
- OpenSourceLibrary
최근에 올라온 글
최근에 달린 댓글
글 보관함
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
링크
- Total
- Today
- Yesterday