Skip to content

Commit e119a40

Browse files
committed
2 parents 3f716df + afe7998 commit e119a40

File tree

1 file changed

+75
-1
lines changed

1 file changed

+75
-1
lines changed

README.md

+75-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77
| **지원 iOS 버전** | iOS 15.0 이상 |
88
| **사용한 기술** | Swift, Swift Concurrency |
99

10-
</table>
10+
11+
## SimpeImageProvider 라이브러리를 사용중인 서비스
12+
13+
| 항목 | 링크 |
14+
|-----------------|----------------------------|
15+
| **케어밋** | [앱스토어](https://apps.apple.com/kr/app/%EC%BC%80%EC%96%B4%EB%B0%8B/id6670529341) |
1116

1217
## how to use
1318

@@ -95,6 +100,75 @@ await SimpleImageProvider.shared.requestImage(...)
95100

96101
※ 샘플링이 완료된 이미지가 캐싱됩니다.
97102

103+
### 사이즈 기반 이미지 캐싱
104+
105+
디스크 및 메모리에 캐싱되는 이미지는 **다운 샘플링이 적용된 이미지가 캐싱**됩니다.
106+
107+
동일한 이미지이지만 샘플링 결과에따라 다르게 캐싱을 진행합니다.
108+
109+
아래 캐싱키 값에 다운샘플링 사이즈가 포함되는 것을 확인할 수 있습니다.
110+
111+
```swift
112+
113+
func createKey(url: String, size: CGSize?) -> String {
114+
115+
var keyString = url
116+
117+
if let size {
118+
119+
let width = size.width
120+
let height = size.height
121+
122+
keyString += "\(width)x\(height)"
123+
}
124+
125+
return keyString
126+
}
127+
128+
```
129+
130+
### 다운 샘플링
131+
132+
이미지 다운 샘플링은 다운로드 받은 데이터 버퍼를 `CGImageSource`로 변경합니다.
133+
134+
`CGImageSource`를 특정 사이즈의 썸네일(원본보다 작은/축약된 이미지)로 변경하는 작업을 통해 다운 샘플링을 진행합니다.
135+
136+
※ 이미지 캐싱을 직접관리하기 위해 이미지소스생성시와 썸네일 생성시 추가적인 캐싱옵션을 모두 해제했습니다.
137+
138+
```swift
139+
140+
func downSamplingImage(dataBuffer: Data, size: CGSize) async -> UIImage? {
141+
142+
let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary
143+
144+
guard let imageSource = CGImageSourceCreateWithData(dataBuffer as CFData,
145+
imageSourceOptions) else {
146+
147+
return nil
148+
}
149+
150+
let biggerLength = max(size.width, size.height)
151+
let scale = await UIScreen.main.scale
152+
let maxDimensionInPixels = biggerLength * scale
153+
let downsampleOptions = [
154+
kCGImageSourceCreateThumbnailFromImageAlways: true,
155+
kCGImageSourceShouldCacheImmediately: false,
156+
kCGImageSourceCreateThumbnailWithTransform: true,
157+
kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels
158+
] as CFDictionary
159+
160+
guard let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0,
161+
downsampleOptions) else {
162+
return nil
163+
}
164+
let image = UIImage(cgImage: downsampledImage)
165+
166+
return image
167+
}
168+
169+
```
170+
171+
98172
### 플로우 차트
99173

100174
```mermaid

0 commit comments

Comments
 (0)