当前位置 : 主页 > 手机开发 > ios >

iOS:UIImagePNGRepresentation().writeToFile不写入目标目录

来源:互联网 收集:自由互联 发布时间:2021-06-11
使用 Swift我试图从URL下载JPG,然后将该图像保存到文件中,但是当我尝试将其保存到不同的目录时,它不会.它将下载到应用程序的Documents文件夹,但是当我尝试将路径设置为另一个子文件夹
使用 Swift我试图从URL下载JPG,然后将该图像保存到文件中,但是当我尝试将其保存到不同的目录时,它不会.它将下载到应用程序的Documents文件夹,但是当我尝试将路径设置为另一个子文件夹时不会.

let dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent("SubDirectory") as String
let filepath = dir.stringByAppendingPathComponent("test.jpg")
UIImagePNGRepresentation(UIImage(data: data)).writeToFile(filepath, atomically: true)

当我运行它时,它不会将图像保存到它?为什么会这样?我需要事先创建子文件夹吗?

几点想法:

>子目录文件夹是否已存在?如果没有,您必须先创建它.现在建议使用NSURL而不是路径字符串.这样产量:

let filename = "test.jpg"
let subfolder = "SubDirectory"

do {
    let fileManager = NSFileManager.defaultManager()
    let documentsURL = try fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
    let folderURL = documentsURL.URLByAppendingPathComponent(subfolder)
    if !folderURL.checkPromisedItemIsReachableAndReturnError(nil) {
        try fileManager.createDirectoryAtURL(folderURL, withIntermediateDirectories: true, attributes: nil)
    }
    let fileURL = folderURL.URLByAppendingPathComponent(filename)

    try imageData.writeToURL(fileURL, options: .AtomicWrite)
} catch {
    print(error)
}

>我建议不要将NSData转换为UIImage,然后将其转换回NSData.如果需要,您可以直接编写原始NSData对象.

通过UIImage对此进行往返的过程可能会导致丢失质量和/或元数据,从而可能使得结果资产变大等.一般情况下,应尽可能使用原始NSData.

网友评论