【发布时间】:2017-06-04 03:44:45
【问题描述】:
我完全不知道UIImageJPEGRepresentation 与 Documents 目录中文件路径的关系。
基本上,当我从文件路径中删除一个文件,然后在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")
}
}
}
最FIRST时间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?
更新:当我将 UIImageJPEGRepresentation 替换为 UIImagePNGRepresentation 时,图像被压缩得很好。我完全糊涂了!
【问题讨论】:
-
你为什么要删除路径?
-
@Optimus:需要删除路径才能在我的应用中执行其他功能
-
在调用
functionA之间,您是否对您的images_ARRAY做任何事情?如果是这样,那可能就是问题所在 - 您的图像数据可能不再采用“jpeg 表示”的格式。尝试减少调试问题的发生... -
@DonMag 我在通话之间没有对
images_ARRAY做任何其他事情。如果我评论如何检查imagePaths_ARRAY.isEmpty == false,那么UIImageJPEGRepresentation的转换没有问题,或者甚至只是注释掉try fileManager.removeItem(atPath: pathToDelete)并且它工作正常。
标签: ios swift uiimagejpegrepresentation