Невозможно сохранить изображения в правильном каталоге

Я пытаюсь сохранить изображения в каталоге. Изображения правильно сохраняются в нужном месте, но когда я проверяю их с помощью пути в искателе, все изображения повреждены и непригодны для использования.

поврежденные изображения

Ниже статического метода:

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

Если вы можете сохранить их в пути и видите, что что-то сохраняется в этом пути, но это поврежденное изображение, я бы посмотрел, как вы конвертируете его в данные, поскольку некоторые настройки, вероятно, неправильные.

bolnad 10.08.2018 15:37
0
1
32
2

Ответы 2

Вы пытались загрузить изображение в UIImageView, чтобы проверить, правильно ли загружаются изображения? imageView.image = UIImage(data: data).

Но я также обнаружил, что вы сохраняете данные вместо изображения, чтобы убедиться, что вы сохраняете изображение, я бы попробовал следующее

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
}

Да, там могут быть ненужные шаги, стоит попробовать, таким образом мы убеждаемся, что он сохранен как Jpeg. Но опять же, я бы сначала проверил, правильно ли загружаются изображения.

Я предполагаю, поскольку вы не совсем указали это, что у вас есть куча объектов 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)
    }
}

Где функция getDocumentsDirectory () следующая:

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

Вы можете задаться вопросом, почему я использовал 1.0 для второго параметра в UIImageJPEGRepresentation, а качество JPEG отображается между 0,0 и 1,0 (это число с плавающей запятой).

Если у вас есть какие-либо подробности, о которых я не знаю, ответьте, и я постараюсь вам помочь. Надеюсь, это поможет вам, ура!

Источник: ссылка на сайт

Другие вопросы по теме