Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UIImage의 size 주의사항(scale, UIScreen.main.scale, scale factor) 본문

iOS 응용 (swift)

[iOS - swift] UIImage의 size 주의사항(scale, UIScreen.main.scale, scale factor)

jake-kim 2024. 4. 15. 01:34

사전지식) scale factor 개념

  • scale factor란 pixcel을 표현할 때 더 높은 픽셀 밀도를 표현하기 위한 값
    • @1x는 1배의 픽셀 밀도
    • @2x는 2배의 픽셀 밀도
    • @3x는 3배의 픽셀 밀도

ex) Assets.xcassets 파일의 한 이미지 파일

이미지 참고: https://www.boltuix.com/2021/02/adding-and-managing-images-in-swiftui.html

UIImage의 size 주의사항

  • UIImage 인스턴스에서 size 프로퍼티를 사용할 수 있는데, 여기서의 size는 위에서 1x, 2x, 3x 중에 어떤 사이즈가 출력될까?
let iamge = UIImage(named: "myImage")
print(image.size) // CGSize(width: 200, height: 200)
  • 정답은 1x기준의 해상도 값이 출력됨
  • 이미지의 실제 해상도는 1x의 해상도가 200*200이라면, 2x는 400*400, 3x는 600*600이지만 UIImage 인스턴스에서 size는 무조건 200*200으로 고정
    • 디바이스의 해상도가 iPhone SE같은 경우 2x이고, iPhoen 15Pro는 3x이지만 모두 image.size 값은 200*200으로 출력
    • 즉, UIImage의 size는 실제 이미지의 해상도가 아닌 1x에서의 해상도를 가져오는 것

간단한 해결 방법 - cgImage 사용하기

  • UIImage를 cgImage로 변환한 후 width와 height값을 구하면 자동으로 scale을 반영한 값을 가져오므로 아래처럼 사용할 것
private let image = UIImage(named: <#T##String#>)
let cgImage = image?.cgImage
print(cgImage?.width, cgImage?.height)
Comments