gpt4 book ai didi

ios - 当在 Swift 中删除指定路径的文件时,UIImageJPEGRepresentation 返回 nil?

转载 作者:行者123 更新时间:2023-11-30 12:24:40 25 4
gpt4 key购买 nike

我完全不知道如何UIImageJPEGRepresentation与 Documents 目录中的文件路径相关。

基本上,当我从文件路径中删除文件,然后调用UIImageJPEGRepresentation时在UIImage上,返回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称为第二次时间,imagePaths_ARRAY不为空,所以我删除了 imagePaths_ARRAY 路径下的所有文件.

但是当 UIImageJPEGRepresentation被调用 image再次,它返回零?

我完全不明白为什么,因为每个 imageimages_ARRAY给我一个有效的 UIImage :

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

正如第一句中提到的,我想知道如何使用 removeItem 删除文件原因UIImageJPEGRepresentation返回零?

更新:当我替换UIImageJPEGRepresentation时与 UIImagePNGRepresentation相反,图像被压缩得很好。我完全困惑了!

最佳答案

看起来您的代码中必须发生了其他事情。

我只是尝试了一下,通过以下代码,我可以重复点击按钮,每次都成功:

//
// 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")
}

}

}

}

关于ios - 当在 Swift 中删除指定路径的文件时,UIImageJPEGRepresentation 返回 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com