| 포맷 | 압축 방식 | 투명도 지원 | 용도 및 특징 |
|---|---|---|---|
| PNG | 무손실 | ✅ 지원 | 아이콘, UI 요소에 적합 (투명 배경 지원) |
| JPEG | 손실 | ❌ 미지원 | 사진처럼 색상이 풍부한 이미지에 적합 |
| HEIC | 손실/무손실 | ✅ 지원 | 최신 포맷으로 압축률 높음, 애플 기본 포맷 |
| WebP | 손실/무손실 | ✅ 지원 | 구글 개발, 웹 최적화 이미지 포맷 |
| 특징 | PNG | JPEG |
|---|---|---|
| 압축 방식 | 무손실 압축 | 손실 압축 |
| 투명도(Alpha) 지원 | ✅ 가능 | ❌ 불가능 |
| 이미지 품질 | 높은 품질 (무손실) | 압축률에 따라 품질 저하 발생 |
| 파일 크기 | 크기가 비교적 큼 | 압축률이 높아 크기가 작음 |
| 적합한 이미지 | 아이콘, 로고 등 | 사진 및 풍경 이미지 |
장점
iOS에서 사용처
특징
iOS에서 사용법
| 항목 | 무손실 압축 | 손실 압축 |
|---|---|---|
| 품질 손상 | 원본 이미지 품질 유지 | 압축률에 따라 원본 품질 일부 손상 |
| 파일 크기 | 상대적으로 큼 | 상대적으로 작음 |
| 대표 포맷 | PNG, TIFF, WebP(무손실) | JPEG, HEIC, WebP(손실) |
| 용도 | UI 요소, 로고, 아이콘 등 | 사진, 배경 이미지 등 |
Asset Catalog에 이미지를 저장하면 Xcode가 자동으로 최적화 및 압축을 수행
| 이미지 리소스 | 디바이스 픽셀 밀도 | 디바이스 예시 |
|---|---|---|
| @1x | 1포인트 당 1픽셀 (1x 밀도) | 초기 아이폰(iPhone 3G 등) |
| @2x | 1포인트 당 4픽셀 (2x 밀도) | 대부분의 아이폰 (예: iPhone 8, SE, iPhone 11) |
| @3x | 1포인트 당 9픽셀 (3x 밀도) | 아이폰 고해상도 디바이스 (예: iPhone 12 Pro, iPhone 15 등) |
이미지 파일 크기로 결정 x -> 해상도로 결정
ex)
1920x1080 해상도의 이미지가 SRGB 포맷으로 저장되어 있다면 픽셀당 4바이트(R, G, B, A 각 1바이트)가 필요하므로 총 8,294,400바이트 (약 8MB)의 메모리를 사용
func downsample(imageAt url: URL, to pointSize: CGSize, scale: CGFloat) -> UIImage? {
let maxDimension = max(pointSize.width, pointSize.height) * scale
let options = [kCGImageSourceShouldCache: false] as CFDictionary
guard let source = CGImageSourceCreateWithURL(url as CFURL, options) else { return nil }
let downsampleOptions = [
kCGImageSourceCreateThumbnailFromImageAlways: true,
kCGImageSourceShouldCacheImmediately: true,
kCGImageSourceThumbnailMaxPixelSize: maxDimension
] as CFDictionary
guard let cgImage = CGImageSourceCreateThumbnailAtIndex(source, 0, downsampleOptions) else {
return nil
}
return UIImage(cgImage: cgImage)
}