【问题标题】:Why is the size of image increasing in Qt?为什么 Qt 中图像的大小会增加?
【发布时间】:2014-02-17 19:03:18
【问题描述】:

我正在使用它来加载图像:

QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件"), "", tr("."));

if (fileName == "")
{
    QMessageBox::critical(this, tr("Error"), tr("Could not open File"));
    return;
}
QImage img;
img.load(fileName);

这是在处理后将其保存回来:

this->img.save(this->fileName);

但问题是,即使我根本不处理图像(即只是加载并保存图像),图像的大小也在增加?
即使对于 ~500kb 的 png 图像,这增加了 ~5kb这对我的算法来说太高了(同一张图像大约 150kb,只经过一次迭代)。我在算法中所做的唯一操作是交换两个像素和异或。我的算法涉及多次迭代。
如何解决这个尺寸问题。
我实际上正在做一个图像加密/解密算法,这种大小的增加给我带来了严重的问题。
我在 linux mint 16 上使用 Qt 5.2。

【问题讨论】:

    标签: image qt image-processing filesize


    【解决方案1】:

    QImage 存储的是图像的内容,而不是文件中的表示。因此,即使您“不处理”图像,您仍然会在加载时对其进行解压缩,并将其重新压缩为文件名所暗示的任何格式。

    如果图像格式使用有损压缩,您可能会在每次加载和重新保存图像时降低图像质量 - 因此应该避免。

    如果图像格式使用无损压缩,则压缩系数高度依赖于内容 - 您对图像的处理将影响图像大小。

    如果您希望保留图像的文件表示,您应该将文件加载到缓冲区中,并且仅在您打算更改它时对QImage 进行操作。因此:

    QFile file(fileName);
    if (! file.open(QIODevice::ReadOnly)) return false;
    QByteArray imageData = file.readAll();
    if (imageData.isEmpty()) return false;
    file.close();    
    
    // process the image
    QImage img;
    QBuffer imageBuffer(&imageData);
    imageBuffer.open(QIODevice::ReadOnly);
    img.load(&imageBuffer, "JPG");
    imageBuffer.close();
    //
    // process the image here
    //
    imageData.clear();
    imageBuffer.open(QIODevice::WriteOnly);
    img.save(&imageBuffer);
    imageBuffer.close();    
    
    // save the image
    QSaveFile file(fileName);
    if (! file.open(QIODevice::WriteOnly)) return false;
    file.write(imageData);
    

    【讨论】:

      【解决方案2】:

      如果您指的是文件的大小,我相信它与函数QImage::savequality 参数有关。最后一个:

      bool QImage::save (const QString & fileName, const char * format = 0, int quality = -1) const

      QImage 已经加载后,它没有最初的质量记忆,然后在保存时 Qt 将质量设为默认值,因此如果最初的图像质量低于默认值,可能会导致文件大小稍微增加。 (此外,在无损格式的情况下,如 .png 质量似乎意味着压缩文件的强度)

      【讨论】:

        猜你喜欢
        • 2010-12-28
        • 2019-02-06
        • 2015-07-17
        • 2019-07-02
        • 1970-01-01
        • 2017-04-22
        • 2021-12-08
        • 2021-01-21
        • 2014-10-17
        相关资源
        最近更新 更多