Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/developeracademy-postech/2024-nc2-a13-photoediting
앨범 속 사진으로 인생네컷 만들기!
https://github.com/developeracademy-postech/2024-nc2-a13-photoediting
Last synced: about 1 month ago
JSON representation
앨범 속 사진으로 인생네컷 만들기!
- Host: GitHub
- URL: https://github.com/developeracademy-postech/2024-nc2-a13-photoediting
- Owner: DeveloperAcademy-POSTECH
- Created: 2024-06-17T02:05:10.000Z (8 months ago)
- Default Branch: develop
- Last Pushed: 2024-08-30T08:51:56.000Z (6 months ago)
- Last Synced: 2024-11-17T06:16:43.999Z (3 months ago)
- Language: Swift
- Homepage:
- Size: 2.46 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 2024-NC2-A13-PhotoEditing
## 🎥 Youtube Link
(추후 만들어진 유튜브 링크 추가)## 💡 About Photo Editing
PhotoKit (Photo Editing) 에 해당하는 주요 프레임워크에는 **Photos** 와 **PhotosUI** 두 가지가 있습니다.
### Photos Framework
- **사진 및 비디오 관리**: 사진 및 비디오를 관리하고 검색하는 기능을 제공합니다.
- **미디어 작업**: 사진 및 비디오를 추가, 삭제, 변경할 수 있습니다.
- **메타데이터 액세스**: 사진과 비디오의 메타데이터에 접근하고 수정할 수 있습니다.
- **사진 라이브러리 변화 감지**: 사용자의 사진 라이브러리에서 일어나는 변화를 감지하고 반응할 수 있습니다.### PhotosUI Framework
- **인터페이스 구성 요소**: 사진 및 비디오를 표시하고 편집하기 위한 기본 UI를 제공합니다.
- **편집 확장**: 사용자가 사진 및 비디오를 편집할 수 있는 인터페이스를 통합할 수 있습니다.### 차이점
- **Photos** 는 주로 사진 및 비디오를 관리하고 조작하는 기능에 중점을 둡니다.
- **PhotosUI** 는 사진 및 비디오를 표시하고 편집할 수 있는 기본 UI 요소를 제공합니다.[PhotoKit | Apple Developer Documentation](https://developer.apple.com/documentation/photokit)
추가로는
사용자가 (종이) 포토북, 캘린더, 카드 등을 쉽게 만들 수 있는 기능을 제공할 수 있는 **Photo Project** 기능,
앨범에 있는 사진을 선택하면 스스로 만든 편집 툴을 불러 올 수 있는 **Photo Extension** 등이 있습니다.
## 🎯 What we focus on?
이번 토픽에서는 PhotoKit 의 기능 중 사진을 넣고 저장하는 “관리 기능”에 집중하여 챌린지를 진행했습니다.

사진 관리 기능이 일반적으로 앱을 제작할 때에 가장 많이 필요로 되는 기능일 뿐만 아니라, 실제로 편집기를 제작하기 위해서는 PhotoKit 단독이 아닌 UIKit, Core Image 등 PhotoKit 이외의 기술이 필요한 것을 알게 되어 가장 기본 기능을 학습하는 것을 목적으로 했습니다.
## 💼 Use Case
이번 챌린지의 Use Case 는 아래와 같습니다.
> 기존 앨범에 있는 사진들을 이용하여 인생네컷 같은 컨셉의 프레임을 가진 재미있는 사진을 만들 수 있게 하자!
>오른쪽과 같은 컨셉사진을 찍기 위해서 사용자는 항상 물리적인 스튜디오에 방문해서 사진을 찍어야 하는데, 앱을 이용하여 이미 가지고 있는 재밌는 사진을 오른쪽과 같은 방식으로 표현할 수 있습니다.
## 🖼️ Prototype

1. 앱 시작시 구동되는 메인 화면에서 플러스(+) 버튼을 누르면 프레임 사진을 만들 수 있는 창이 나타납니다.
2. 사진 추가 아이콘을 누르면 Photo Picker 가 나타나고, 추가할 사진을 고를 수 있습니다.
3. 사진을 선택하면 프레임에 알맞게 들어갈 수 있는 가이드 격자가 나타나고, 사진 영역을 선택할 수 있습니다.
4. 사진 영역까지 선택이 끝나면 프레임 칸에 지정한 사진이 추가되는 것을 확인할 수 있습니다.
5. 프레임 세 칸에 사진을 모두 추가하면 완성(Done) 버튼이 활성화됩니다.
6. 완성된 사진에 제목을 입력하고 저장(Save) 버튼을 누르면 메인 화면의 Collection 에 추가됩니다.
7. Collection 의 사진을 누르면 각 사진의 상세 화면으로 이동합니다.
8. 상세 화면에서는 사진의 제목을 확인할 수 있고, 즐겨찾기 버튼을 누를 수 있습니다.
9. 즐겨찾기가 추가된 사진은 메인화면의 Favorite 항목에 추가됩니다.
10. 상세 화면에서 저장 버튼을 눌러 해당 이미지를 아이폰의 앨범에 저장할 수 있습니다.
## 🛠️ About Code
🔻 PhotoKit 사용에 필요한 프레임워크를 import 합니다.
```swift
import Photos
import PhotosUI
```🔻PhotosPicker 클래스로 앨범의 사진을 선택할 수 있습니다. 선택한 사진은 selection 에 담아 사용합니다.
[PhotosPicker | Apple Developer Documentation](https://developer.apple.com/documentation/photokit/photospicker)
```swift
PhotosPicker(selection: $edit.selectedPhoto) {
if $edit.wrappedValue.editedImage != nil {
if let image = $edit.wrappedValue.editedImage {
Image(uiImage: image)
.resizable()
.scaledToFill()
.frame(width: 319, height: 204)
.clipped()
}
} else {
ZStack {
Rectangle()
.frame(width: 319, height: 204)
.foregroundColor(.white)
Image(systemName: "photo.badge.plus")
.font(.system(size: 33))
}
}
}
```🔻UIImageWriteToSavedPhotosAlbum 클래스를 이용하여 아이폰의 앨범에 사진을 저장합니다.
[UIImageWriteToSavedPhotosAlbum(_:_:_:_:) | Apple Developer Documentation](https://developer.apple.com/documentation/uikit/1619125-uiimagewritetosavedphotosalbum)
```swift
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
```🔻PHPhotoLibrary.authorizationStatus 를 이용하여 권한여부를 확인할 수 있습니다.
[PHPhotoLibrary | Apple Developer Documentation](https://developer.apple.com/documentation/photokit/phphotolibrary)
```swift
if PHPhotoLibrary.authorizationStatus(for: .addOnly) == .denied {
isDenied.toggle()
} else {
isSaved.toggle()
}
```