无法将图像保存在正确的目录中

时间:2018-08-10 13:26:13

标签: swift image methods

我正在尝试将图像保存在目录中。图像正确地保存在正确的位置,但是当我使用取景器中的路径检查这些图像时,所有图像均被损坏且无法使用。

damaged images

在静态方法下面:

static func writeImageFile(with data: Data, issue: Issue, page: Int, isThumbnail: Bool) throws -> URL {
    let url = MediaFileManager.issueImagesDirectoryURL(issue: issue).ensuringDirectoryExists()
    let imageURL = url.appendingPathComponent(imageName(for: page, isThumbnail: isThumbnail))
    try data.write(to: imageURL)
    return url
}

该类中的呼叫:

    DispatchQueue.main.async {
        guard let data = result.data else {
            self.downloadDidFail(for: result.page)
            return
        }
        do {
            let writeImageFile = try MediaFileManager.writeImageFile(with: data, issue: self.issue, page: result.page, isThumbnail: false)
            let writeThumbFile  = try MediaFileManager.writeImageFile(with: data, issue: self.issue, page: result.page, isThumbnail: true)
            print(writeImageFile)
            print(writeThumbFile)
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }

2 个答案:

答案 0 :(得分:1)

我将假设,因为您没有对此进行详细说明,所以您有一堆UIImage对象。 而且我还注意到您希望将图像保存为JPEG,这完全没有问题,不用担心。

我会选择这样的东西:

if let image = UIImage(named: "example.png") {
    if let data = UIImageJPEGRepresentation(image, 1.0) {
        let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
        try? data.write(to: filename)
    }
}

其中的func getDocumentsDirectory()如下:

func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}

您可能想知道为什么我在UIImageJPEGRepresentation中的第二个参数上使用1.0,这是JPEG质量在0.0到1.0之间映射的值(是一个浮点数)。

如果您有我不知道的任何详细信息,请回复,我将尽力提供相应的帮助。 希望它能对您有所帮助,加油!

来源:link

答案 1 :(得分:0)

您是否尝试过将图像加载到UIImageView来查看图像是否已正确下载? static func writeImageFile(with data: Data, issue: Issue, page: Int, isThumbnail: Bool) throws -> URL { let url = MediaFileManager.issueImagesDirectoryURL(issue: issue).ensuringDirectoryExists() let imageURL = url.appendingPathComponent(imageName(for: page, isThumbnail: isThumbnail)) let image = UIImage(data: data) let imgData = UIImageJPEGRepresentation(image, 1) try imgData.write(to: imageURL) return url }

但是我也检测到您正在保存数据而不是图像,为了确保您正在保存图像,我将尝试以下操作

public function reviewsactivity()
{
    $activity = Activity::orderBy('id', 'DESC')->paginate();
    $users = User::orderBy('id', 'ASC')->pluck('id', 'name');
    return view('reviews.reviewsactivity', compact('activity', 'users'));
}

是的,它可能有不必要的步骤,值得一试,通过这种方式,我们可以确保将其另存为Jpeg。但是再次,我将检查是否首先正确下载了图像。