Использование QuaZip для извлечения .cbz и создания QImages в Qt?

В настоящее время я пытаюсь распаковать файл .cbz (в основном файл .zip) и сохранить все изображения .png, содержащиеся в этом файле .cbz, в файл std::vector<QImage>.

Для этого я использую QuaZip. Я просмотрел несколько примеров в Интернете и попытался реализовать несколько различных методов, используя документацию по классам QuaZip.

Это код, который у меня сейчас есть:

// Store all files for later access given the CBZ file
bool CbzReader::loadCbzFile(QString cbzFile) {
    QuaZip zip(cbzFile);
    zip.open(QuaZip::mdUnzip);

    const QStringList fileList = zip.getFileNamesList();
    QStringList allFiles = JlCompress::extractFiles(cbzFile, fileList);

    QImage newImage;
    for(int file = 0; file < fileList.size(); file++) {
        QImageReader reader(allFiles[file]);
        newImage = reader.read();

        if(newImage.isNull()) return false;

        imageList.push_back(newImage); //save image to class variable    
    }

    return true;
}

Переменная allFiles содержит 265 записей, однако внутри цикла for она возвращает false, так как Qt говорит, что newImage равно invalid.

Что в этом я делаю не так? Должен ли я использовать другие функции в QuaZip вместо JlCompress?


person jq09    schedule 03.02.2019    source источник
comment
Возможно, ваш путь неверен. Также проверьте свой текущий рабочий каталог на наличие извлеченных изображений. Посмотрите, читаются ли они с помощью программного обеспечения для обработки изображений.   -  person drescherjm    schedule 03.02.2019
comment
Вы можете добавить быструю проверку, используя QFile::exists(allFiles[file]), чтобы убедиться, что извлеченный файл действительно существует, прежде чем пытаться его прочитать.   -  person G.M.    schedule 03.02.2019
comment
@drescherjm Путь к файлу .cbz? Нет, я думаю, это правильно. Список fileList содержит файлы в исходном файле .cbz. Однако после дальнейшего изучения файл .cbz содержит смесь изображений .jpeg и .png. Возможно, дело в этом?   -  person jq09    schedule 03.02.2019
comment
Я говорю о том, была ли в сжатом файле какая-либо структура папок.   -  person drescherjm    schedule 03.02.2019
comment
@G.M. Я попробовал это, и да, это существует.   -  person jq09    schedule 03.02.2019
comment
Спасибо вам обоим за ваши предложения. Оказывается, в результате распаковки файла .cbz по крайней мере один файл не был .png или .jpg, поэтому теперь я проверяю расширение файла, чтобы убедиться, что расширение правильное и все работает правильно!   -  person jq09    schedule 03.02.2019


Ответы (1)


Оказывается, что при извлечении файла .cbz по крайней мере один файл не был файлом изображения, и из него пытались создать QImage, что вызвало ошибку. Я не уделял должного внимания содержимому разархивированного файла.

Теперь это работает, так как я использую логическое выражение для проверки расширений несжатых файлов.

Так что даааа, мои плохие парни.

person jq09    schedule 03.02.2019