Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- tableView
- Refactoring
- 애니메이션
- HIG
- swiftUI
- Xcode
- clean architecture
- UICollectionView
- Protocol
- 리팩토링
- SWIFT
- RxCocoa
- Human interface guide
- uitableview
- ios
- 리펙토링
- rxswift
- collectionview
- 클린 코드
- map
- ribs
- UITextView
- MVVM
- 스위프트
- combine
- swift documentation
- Observable
- Clean Code
- 리펙터링
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법 (UIGraphics, CurrentImageContext) 본문
iOS 응용 (swift)
[iOS - swift] 3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법 (UIGraphics, CurrentImageContext)
jake-kim 2023. 11. 9. 01:512. 이미지 처리 - 회전 각도 메타 정보, 이미지 메타 다이터, imageOrientation (exif)
3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법 (UIGraphics, CurrentImageContext)
안전한 이미지 처리 방법 (저번시간에 알아본 내용)
* 아래 내용에 대한 구체적인 내용은 이전 포스팅 글 참고
- EXIF 정보나 imageOrientation 정보가 다르고, 이미지를 이미지 서버에 업로드할 때 애초에 imageOrientation 정보를 제거하면 서로 혼돈이 없는 상태로 관리가 가능
- 아이폰 앨범에서 이미지 회전 메타 정보가 이미 적용된 결과를 보여주기 때문에, swift에서 사용할 때 메타 정보를 제거하고난 후 이미지 서버에 업로드하면 관리가 용이
이미지 회전 메타 정보
- 지난 시간에 알아본 메타 정보를 출력해보면, right로 출력
if let image = UIImage(named: "IMG_2467.JPG") {
printAngle(image)
/*
right
*/
}
func printAngle(_ image: UIImage) {
switch image.imageOrientation {
case .up:
print("up")
case .upMirrored:
print("upMirrored")
case .right:
print("right")
case .rightMirrored:
print("rightMirrored")
case .down:
print("down")
case .downMirrored:
print("downMirrored")
case .left:
print("left")
case .leftMirrored:
print("leftMirrored")
default:
print("unknown")
}
}
- orientation을 제거하는 함수 정의
- 방향이 .up이면 회전이 안되어있다는 것이므로 pass
func removedOrientationImage(_ image: UIImage) -> UIImage {
guard image.imageOrientation != .up else { return image }
}
- 그래픽 컨텍스트 생성
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
- 기존 이미지(image)를 새로 생성한 그래픽 컨텍스트로 그림
- 이 단계에서 이미지를 다시 그리는 것이므로 메타 정보가 삭제
image.draw(in: CGRect(origin: .zero, size: image.size))
- 그래픽 컨텍스트에서 이미지를 가져와서 normalizedImage 변수에 저장
let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()
- 컨텍스트 제거
UIGraphicsEndImageContext()
- 완성
func removedOrientationImage(_ image: UIImage) -> UIImage {
guard image.imageOrientation != .up else { return image }
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
image.draw(in: CGRect(origin: .zero, size: image.size))
let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return normalizedImage ?? image
}
(사용하는 쪽)
if let image = UIImage(named: "IMG_2467.JPG") {
printAngle(image)
imageView1.image = image
let removedOrientationImage = removedOrientationImage(image)
printAngle(removedOrientationImage)
imageView1.image = removedOrientationImage
/*
right
up
*/
}
* 전체 코드: https://github.com/JK0369/ExOrientation
'iOS 응용 (swift)' 카테고리의 다른 글
Comments