如何保存和加载 Image swift 4?

Posted

技术标签:

【中文标题】如何保存和加载 Image swift 4?【英文标题】:How to save and load Image swift 4? 【发布时间】:2019-09-19 03:59:20 【问题描述】:

我有 2 个函数 saveImage 和 loadImage:

//saveImage
func saveImage(imageName: String, image: UIImage) 

    guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else  return 
    let fileName = imageName
    let fileURL = documentsDirectory.appendingPathComponent(fileName)
    guard let data = image.jpegData(compressionQuality: 1) else  return 

    if FileManager.default.fileExists(atPath: fileURL.path) 
        do 
            try FileManager.default.removeItem(atPath: fileURL.path)
            print("Removed old image")
         catch let removeError 
            print("couldn't remove file at path", removeError)
        
    
        do 
        try data.write(to: fileURL)
     catch let error 
        print("error saving file with error", error)
    


//loadImage
func loadImageFromDocuments(fileName: String) -> UIImage? 

    let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

    let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
    let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

    if let dirPath = paths.first 
        let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
        let image = UIImage(contentsOfFile: imageUrl.path)
        return image

    

    return nil



当我这样调用 tableviewcelll 时:

self.cachedImageView.saveImage(imageName:,image:)
self.cachedImageView.loadImageFromDocuments(fileName:)

我不知道怎么用。

【问题讨论】:

不清楚您的问题是什么,您的代码在哪里失败,您是否收到任何错误等? 错误是:调用 func self.cachedImageView.saveImage(imageName:,image:) self.cachedImageView.loadImageFromDocuments(fileName:) 时调用 'loadImageFromDocuments(fileName:)' 的结果未使用跨度> 我想将图片从 url 保存到文档中并从文档中加载图片请帮助我! 【参考方案1】:

创建如下图像加载器类:-

class PKImageLoader 
let imageCache = NSCache<NSString, UIImage>()

class var sharedLoader: PKImageLoader 
    struct Static 
        static let instance: PKImageLoader = PKImageLoader()
    
    return Static.instance


func imageForUrl(urlPath: String, completionHandler: @escaping (_ image: UIImage?, _ url: String) -> ()) 
    guard let url = urlPath.toUrl else 
        return
    
    if let image = imageCache.object(forKey: urlPath as NSString) 
        completionHandler(image, urlPath)
    
    else 
        URLSession.shared.dataTask(with: url)  data, _, _ in
            guard let finalData = data else  return 

            DispatchQueue.main.async 
                if let img = UIImage(data: finalData) 
                    self.imageCache.setObject(img, forKey: urlPath as NSString)
                     completionHandler(img, urlPath)
                
            
        .resume()
    

从 URL 下载图像并保存(通过创建 UIImage 数组)

您可以根据需要使用该数组。

使用下面的扩展将图像直接设置为图像视图。

extension UIImageView 
func setImage(from urlPath: String, placeHolder: UIImage? = nil) 
    self.image = placeHolder
    PKImageLoader.sharedLoader.imageForUrl(urlPath: urlPath)  image, _ in
        self.image = image
    

这个也能帮到你

extension String 
var toUrl: URL? 
    if self.hasPrefix("https://") || self.hasPrefix("http://") 
        return URL(string: self)
    
    else 
        return URL(fileURLWithPath: self)
    

【讨论】:

我使用 nscache 加载并将图像保存到缓存中,但我想保存到硬盘并将图像从硬盘加载到设备中,如何使用?

以上是关于如何保存和加载 Image swift 4?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 4 中使用 Launch Screen 或 Image 阻止机密信息? [复制]

Swift - 多个 TableView 复选标记 - 保存和加载选择

iOS,Swift:如何保存包含自定义对象的数组以便我可以加载以供重用?

Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?

如何在 Swift 中按名称/标识符从相机胶卷中获取图像

如何从 macOS Swift 上的文档目录加载图像?