본문 바로가기

iOS/Swift

[ios - swift] download image from url

url에서 이미지 다운받아 내부 저장소에 저장 후 ImageView에 diplay 하기.

 

// guard let url = URL(string: "https://anyUrl.com") else {return}
// downloadImage(from: url, imageName: "imageName")

func downloadImage(from url: URL, imageName: String) {
    getData(from: url) { data, response, error in
        guard let data = data, error == nil else { return }

        Utils.ImageSaveAsFile(image: UIImage(data: data)!, name: imageName, onSuccess:{ result in
            // always update the UI from the main thread
            DispatchQueue.main.async() { [weak self] in
                self?.resultimageView.image = getSavedImage(name: imageName)
            }
        })


    }
}

func getData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
    URLSession.shared.dataTask(with: url, completionHandler: completion).resume()
}

func ImageSaveAsFile(image: UIImage, name: String,
                                   onSuccess: @escaping (Bool) -> Void) {
//내부저장소에 이미지 파일로 저장하기
    guard let data: Data = image.jpegData(compressionQuality: 1) ?? image.pngData() else { return }

    if let directory: NSURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL {
        do {
            try data.write(to: directory.appendingPathComponent(name)!)
           onSuccess(true)
        } catch let error as NSError {
            print("Could not save Image", error, error.userInfo)
            onSuccess(false)
        }
    }
}

func getSavedImage(name: String) -> UIImage? {
//내부저장소에 저장된 이미지 파일 불러오기
    if let dir: URL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        let path: String = URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(name).path

        let image: UIImage? = UIImage(contentsOfFile:  path)
        return image
    }
    return nil
}

'iOS > Swift' 카테고리의 다른 글

[ios - swift] custom camera  (0) 2022.12.06
[ios - swift] UIView several corner radius  (0) 2022.12.06
[ios - swift] Alamofire upload image data  (0) 2022.12.05
[ios - swift] resize UIImage  (0) 2022.12.02
[ios - swift] crop UIImage  (0) 2022.11.23