사용자 사진을 asset으로 불러와서 requestImage 메소드에 targetSize만큼 지정하여
targetSize만큼 적용된 이미지를 저장하려고 하는데... 문제가 있다.
공식문서도 다 보고, 다른 분들의 블로그도 참고하여 requestImage의 각 파라미터들을 적절하게 정했는데도
이미지가 원하는 targetSize만큼 나오지 않고 있다.
목적
이미지를 무조건 1:1비율로 저장하고자 한다.
1:1비율이 아닌 이미지는 적절히 aspectFil을 통하여 1:1비율로 자동으로 맞추어 이미지가 짤리거나, 하고 싶다.
문제
targetSize를 360보다 큰 사이즈로 잡는 다면, 원본 이미지로 나오게 된다.
- 예를 들어, 원본 이미지가 1100 * 2000 이라면, 이 크기로 나오게 된다.
- 원본 이미지가 1:1비율이 아니므로, 의도한 바와 다르게 짤리지도 않고, 그대로 나온다.
반면 360이하인 사이즈로 잡는다면, 목적에 맞게 잘 나온다.
알게된 이유?
고정적인 사이즈보다는 디바이스 크기별로 이미지를 저장하고 싶었기 때문에,
UIScreen.main.bounds.width 를 이용하여 targetSize를 정했다.
하지만, 360보다 큰 디바이스의 경우 ( iPhone 12 pro )는 390인데, 이 경우에는 원본 이미지로 계속 나오고 있었다.
하지만 360이하인 값으로 targetSize를 정하니 이미지가 적당히 잘 짤리면서 1:1비율로 잘 나왔다.
코드
resizeMode를 통해서 정확히 targetSize만큼 나오도록 옵션을 지정했고, 동기로 지정함으로써, 반환이미지도 한번만 호출되도록 했다.
targetSize를 iPhon12pro 에서, UIScreen.main.bounds.width 로 width, height둘다 지정하면 원본사이즈로 크게 나온다. ( 원본 사이즈가 1:1비율이 아니라면 원본비율로 나온다. )
let options: PHImageRequestOptions = PHImageRequestOptions()
options.isSynchronous = true
options.resizeMode = .exact
PHImageManager.default().requestImage(for: asset,
targetSize: CGSize(width: 360, height: 360),
contentMode: .aspectFill,
options: options) { image, _ in
guard let image = image else { return }
print(image.size)
}
결국 360 이하로 잡아야 문제가 해결되지만 왜 360보다 큰 사이즈에서는 기대와 다른 값이 나오는지 아직도 모르겠다. 😭
그래서 https://beankhan.tistory.com/241 이분의 블로그를 보면 targetSize에 따른 수행시간을 측정하셨는데,
360보다 크게되면 현저히 시간이 느려진다라고 나와있다.
지금 내가 쓴 글에 의하면, 360보다 큰 사이즈는 원본사이즈로 나오려고 하기 때문에, 원본사이즈가 클수록 현저히 느려질 수 밖에 없다라고 생각한다.
'iOS' 카테고리의 다른 글
SwiftUI - Charts 기본 라이브러리 사용해보기 (0) | 2023.06.24 |
---|---|
openAI chat API SSE (text/event-stream) 적용해보기 (0) | 2023.06.22 |
설정앱에 라이센스 내용 추가하기 (0) | 2021.10.20 |
SwiftGen 설치하는 방법 (0) | 2021.09.24 |
앱 testFlight에 업로드 및 테스터 초대하기 (0) | 2021.09.23 |