Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
J0onYEong authored Nov 21, 2024
1 parent f2f21f0 commit afe7998
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,75 @@ await SimpleImageProvider.shared.requestImage(...)

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

### 사이즈 기반 이미지 캐싱

디스크 및 메모리에 캐싱되는 이미지는 **다운 샘플링이 적용된 이미지가 캐싱**됩니다.

동일한 이미지이지만 샘플링 결과에따라 다르게 캐싱을 진행합니다.

아래 캐싱키 값에 다운샘플링 사이즈가 포함되는 것을 확인할 수 있습니다.

```swift

func createKey(url: String, size: CGSize?) -> String {

var keyString = url

if let size {

let width = size.width
let height = size.height

keyString += "\(width)x\(height)"
}

return keyString
}

```

### 다운 샘플링

이미지 다운 샘플링은 다운로드 받은 데이터 버퍼를 `CGImageSource`로 변경합니다.

`CGImageSource`를 특정 사이즈의 썸네일(원본보다 작은/축약된 이미지)로 변경하는 작업을 통해 다운 샘플링을 진행합니다.

※ 이미지 캐싱을 직접관리하기 위해 이미지소스생성시와 썸네일 생성시 추가적인 캐싱옵션을 모두 해제했습니다.

```swift

func downSamplingImage(dataBuffer: Data, size: CGSize) async -> UIImage? {

let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary

guard let imageSource = CGImageSourceCreateWithData(dataBuffer as CFData,
imageSourceOptions) else {

return nil
}

let biggerLength = max(size.width, size.height)
let scale = await UIScreen.main.scale
let maxDimensionInPixels = biggerLength * scale
let downsampleOptions = [
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceShouldCacheImmediately: false,
kCGImageSourceCreateThumbnailWithTransform: true,
kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels
] as CFDictionary

guard let downsampledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0,
downsampleOptions) else {
return nil
}
let image = UIImage(cgImage: downsampledImage)

return image
}

```


### 플로우 차트

```mermaid
Expand Down

0 comments on commit afe7998

Please sign in to comment.