Youngminah/TIL

앱 안의 도큐먼트에 이미지 저장, 삭제, 가져오기 (로컬에 저장)

Youngminah opened this issue · 0 comments

로컬 도큐먼트에 이미지 저장

func saveImageToDocumentDirectory(imageName: String, image: UIImage) {
    //1. 이미지 저장할 경로 설정: 도규먼트 폴더
    guard let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
        return
    }
    //2. 이미지 파일에 대한 이름 & 최종 경로 설정
    let imageURL = documentDirectory.appendingPathComponent(imageName)
    //3. 이미지 압축
    guard let data = image.pngData() else { return }
    //4. 이미지 저장 : 동일한 경로에 이미지를 저장하게 될 경우, 덮어쓰기
    //4-1. 이미지 경로 여부 확인
    if FileManager.default.fileExists(atPath: imageURL.path){
        //4-2. 기존 경로에 있는 이미지 삭제
        do {
            try FileManager.default.removeItem(at: imageURL)
            print("이미지 삭제 완료")
        } catch {
            print("이미지 삭제하지 못했습니다.")
        }
    }
    //5. 이미지를 도큐먼트에 저장
    do {
        try data.write(to: imageURL)
        print("이미지 저장 완료")
    } catch {
        print("이미지 저장 못함")
    }
}

로컬 도큐먼트에 저장된 이미지 가져오기

//도규먼트 폴더 경로 -> 이미지 찾기 -> UIImage -> UIImageView
func loadImageFromDocumentDirectory(imageName: String) -> UIImage? {

let documentDirectory = FileManager.SearchPathDirectory.documentDirectory
let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let path = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)
        
if let directoryPath = path.first {
        let imageURL = URL(fileURLWithPath: directoryPath).appendingPathComponent(imageName)
        return UIImage(contentsOfFile: imageURL.path)   
    }
    return nil
}

로컬 도큐먼트에 저장된 이미지 삭제하기

func deleteImageFromDocumentDirectory(imageName: String){
    guard let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
        return
    }
    let imageURL = documentDirectory.appendingPathComponent(imageName)
        
    if FileManager.default.fileExists(atPath: imageURL.path){
        do {
            try FileManager.default.removeItem(at: imageURL)
            print("이미지 삭제 완료")
        } catch {
            print("이미지 삭제하지 못했습니다.")
        }
    }
 }