从文档目录中获取图像 swift

Get image from documents directory swift

假设我使用这段代码将图像保存到文档目录

let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
if paths.count > 0 {
    if let dirPath = paths[0] as? String {
        let readPath = dirPath.stringByAppendingPathComponent("Image.png")
        let image = UIImage(named: readPath)
        let writePath = dirPath.stringByAppendingPathComponent("Image2.png") 
        UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
    }
  }
}

我该如何找回它?请记住,与 iOS8 相比,确切路径经常变化

你正在寻找运行时写入图像的文档目录路径,为了读回它,你可以使用确切的逻辑:

Swift 3 和 Swift 4.2

let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
if let dirPath          = paths.first
{
   let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("Image2.png")
   let image    = UIImage(contentsOfFile: imageURL.path)
   // Do whatever you want with the image
}

Swift 2

let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask    = NSSearchPathDomainMask.UserDomainMask
if let paths            = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
{
     if paths.count > 0
     {
         if let dirPath   = paths[0] as? String
         {
             let readPath = dirPath.stringByAppendingPathComponent("Image2.png")
             let image    = UIImage(contentsOfFile: readPath)
             // Do whatever you want with the image
         }
     }
}

Swift 2

如果您想从 Swift 中的文档目录中获取文件 2:

let path: String? = NSBundle.mainBundle().pathForResource("imageName", ofType: "png", inDirectory: "DirectoryName/Images")
let imageFromPath = UIImage(contentsOfFile: path!)!
self.myImage.image = imageFromPath

希望对某人有所帮助

作为扩展更好。

extension URL {
    static var documentsDirectory: URL {
        let documentsDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        return try! documentsDirectory.asURL()
    }

    static func urlInDocumentsDirectory(with filename: String) -> URL {
        return documentsDirectory.appendingPathComponent(filename)
    }
}

这样使用:

let path = URL.urlInDocumentsDirectory(with: filename).path
let image = UIImage(contentsOfFile: path)

从文件夹或目录加载多张图片。 - Swift 4

这是要显示的图片,我们想要在下面给出的代码中实现什么。

这是从文档目录中的文件夹中查找多张图片的代码。我已经写了一个方法来做同样的事情。

In the code we are passing the "Folder Name" (ie. Red) and getting the contents of that directory. In return we got the array of images name.

    static func loadImagesFromAlbum(folderName:String) -> [String]{

    let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
    let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
    let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
    var theItems = [String]()
    if let dirPath          = paths.first
    {
        let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(folderName)

        do {
            theItems = try FileManager.default.contentsOfDirectory(atPath: imageURL.path)
            return theItems
        } catch let error as NSError {
            print(error.localizedDescription)
            return theItems
        }
    }
    return theItems
}

这是给定代码的结果。

希望对您有所帮助。

谢谢

// --------------------------------------------------------
// MARK:- Document Directory
// --------------------------------------------------------

///# Get Data from document directory #///

private func getDocumentData(){
    
    ///# Path #///
    
    let folderPath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("MyZipFiles") /// * folder *///
    let filePath = URL(fileURLWithPath: folderPath).appendingPathComponent("\(self.id)/\(self.titleVideo)") ///* inside folder all files *///
    print(filePath)

    ///# Get JsonFile from Directory with alamofire #///
    
    let jsonFilePath = URL(fileURLWithPath: folderPath).appendingPathComponent("\(self.id)/\(self.titleVideo)/python.json") ///* inside filename *///
    if (try! jsonFilePath.checkResourceIsReachable()) {
        print("file exist")
        Alamofire.request(jsonFilePath, method: .get, parameters: nil).responseData { (response) in
            guard let data = response.data else { return }
            do{
                let json = try SwiftyJSON.JSON(data: data)
                let results = json["images"]
                for arr in results.arrayValue{
                    self.arrImageData.append(Images(json: arr))
                }
                self._pickerCollectionView.reloadData()
                print(self.arrImageData)
            }catch{
                print(error.localizedDescription)
            }
        }

        ///# Back  Video #///
        let backVideoPath = URL(fileURLWithPath: folderPath).appendingPathComponent("\(self.id)/\(self.titleVideo)/background_video.mp4") ///* inside filename *///
        print(backVideoPath)

        
        ///# Output Video #///
        let outputPath = URL(fileURLWithPath: folderPath).appendingPathComponent("\(self.id)/\(self.titleVideo)/output.mp4")
        print(outputPath)

        ///# Get images string from documentdirectory #///
        
        do {
            let imagesData = try FileManager.default.contentsOfDirectory(atPath: filePath.path)  ///* Base Path to find Image *///
            
            ///# for loop to append path to find saved images and fill image array #///
            
        for imgStr in imagesData{
            if imgStr.hasPrefix("img"){
                imagesArr.append(imgStr)
                print(imagesArr)
                let document = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("MyZipFiles")
                print(document)
                
                let loadImage = document.appendingPathComponent("\(self.id)/\(self.titleVideo)")
                
                let imgUrl = loadImage.appendingPathComponent(imgStr, isDirectory: true)
                print(imgUrl.path)

                if let data = UIImage(named: imgStr)?.pngData() ,
                   !FileManager.default.fileExists(atPath: imgUrl.path){
                    do{
                        ///* write data to convert string images into url in document folder *///
                        
                        try data.write(to: imgUrl)
                        print("Image Add Successfully")
                        Log.debug(imgStr)
                    }
                    catch{
                        print("Image Not Added")
                    }
                }
                ///* append written url into array of images *///

                imgArr.append(imgUrl)
            }
        }
    }
        catch let err{
            print(err.localizedDescription)
        }
    }
}