当在Swift中删除指定路径的文件时,UIImageJpeGresentation将返回零



我对UIImageJPEGRepresentation与文件目录中的文件路径有何关系完全困惑。

基本上,当我从文件路径删除文件时,然后在UIImage上调用UIImageJPEGRepresentation时,它将返回nil,但是如果未删除文件路径,则UIImageJPEGRepresentation会返回图像的数据表示。

这是我的示例代码以演示我的意思:

func functionA()
{
    if imagePaths_ARRAY.isEmpty == false
    {
        for pathToDelete in imagePaths_ARRAY
        {
            if fileManager.fileExists(atPath: pathToDelete)
            {
                do
                {
                    try fileManager.removeItem(atPath: pathToDelete)
                }
                catch let error as NSError
                {
                    print(error.localizedDescription)
                }
            }
            else
            {
                print("ERROR")
            }
        }
        imagePaths_ARRAY.removeAll()
    }
    print(images_ARRAY)
    for image in images_ARRAY
    {
        print(image)
        if let imageData = UIImageJPEGRepresentation(image, 0.5)
        {
            print("RETURN GOOD")
            let imageName = getImageName()
            let imagePath = getDirectoryPath().appending("/" + imageName)
            let success = fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
            if success == true
            {
                imagePaths_ARRAY.append(imagePath)
            }
        }
        else
        {
            print("RETURN NIL")
        }
    }
}

非常第一个时间 functionA被调用, imagePaths_ARRAY是空的,因此代码的内部块不执行。我在UIImages的数组中循环,对于每个图像,我致电UIImageJPEGRepresentation将其转换为Data对象以写入文件,然后将imagePath添加到我的imagePaths_ARRAY数组中,以在我的代码中使用。

> 。

对于每个图像,我看到RETURN GOOD的日志,所有图像都写入文件。

但是,当functionA称为 second 时间时,imagePaths_ARRAY不是空的,因此我从imagePaths_ARRAY中的路径中删除所有文件。

但是,当UIImageJPEGRepresentation再次在image上调用时,它返回nil?

我对为什么感到完全困惑,因为images_ARRAY中的每个image都给我一个有效的UIImage

[<UIImage: 0x600000085280> size {4288, 2848} orientation 0 scale 1.000000]

如第一句话所述,我想知道如何使用removeItem删除文件会导致UIImageJPEGRepresentation返回nil?

更新:当我用UIImagePNGRepresentation替换UIImageJPEGRepresentation时,图像被压缩了。我完全困惑!

似乎在您的代码中必须必须进行

我只是尝试了一下,使用以下代码,我可以反复点击按钮,每次我都能获得成功:

//
//  TestViewController.swift
//
import UIKit
class TestViewController: UIViewController {
    var imagePaths_ARRAY = [String]()
    var images_ARRAY = [UIImage]()
    let fileManager = FileManager.default
    override func viewDidLoad() {
        super.viewDidLoad()
        let names = ["s1", "s2", "s3"]
        for s in names {
            if let img = UIImage(named: s) {
                images_ARRAY.append(img)
            }
        }
    }
    @IBAction func btnTapped(_ sender: Any) {
        functionA()
    }

    func getDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    }
    func getImageName() -> String {
        let randomNum:UInt32 = arc4random_uniform(1000000)
        return "randomName_(randomNum)"
    }
    func functionA()
    {
        print(imagePaths_ARRAY)
        if imagePaths_ARRAY.isEmpty == false
        {
            for pathToDelete in imagePaths_ARRAY
            {
                if fileManager.fileExists(atPath: pathToDelete)
                {
                    do
                    {
                        try fileManager.removeItem(atPath: pathToDelete)
                    }
                    catch let error as NSError
                    {
                        print(error.localizedDescription)
                    }
                }
                else
                {
                    print("ERROR")
                }
            }
            imagePaths_ARRAY.removeAll()
        }
        print(images_ARRAY)
        for image in images_ARRAY
        {
//          print(image)
            if let imageData = UIImageJPEGRepresentation(image, 0.5)
            {
                let imageName = getImageName()
                let imagePath = getDirectoryPath().appending("/" + imageName)
                let success = fileManager.createFile(atPath: imagePath, contents: imageData, attributes: nil)
                if success == true
                {
                    print("RETURN GOOD")
                    imagePaths_ARRAY.append(imagePath)
                }
            }
            else
            {
                print("RETURN NIL")
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新