解决在Qt6.8中加载图片报错

qt.gui.imageio: libpng warning: iCCP: known incorrect sRGB profile

这个报错信息是由 libpng 库发出的警告,提示 PNG 文件的 ICC 配置文件(颜色配置文件)存在已知的格式错误或不符合标准的配置。这通常不会影响图片的加载和显示,但可能会对图片的颜色校准有轻微影响。


报错原因

  • 问题的根源:某些 PNG 文件的嵌入 sRGB 配置文件并不完全符合标准,这可能是由某些图像处理软件在生成或保存这些 PNG 文件时造成的。
  • Qt 使用 libpng:Qt 使用的 libpng 库在解析这些图片时检测到了这一点,并发出警告。

解决方法

以下是几种常见的解决方法:

1. 在代码中禁用警告输出

如果你不需要这些警告信息,可以通过调整日志输出级别在 Qt 中屏蔽此类日志:

#include <QLoggingCategory>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QLoggingCategory::setFilterRules("qt.gui.imageio.warning=false");
    return app.exec();
}

在Qt6.8中测试,此方法无效。 

2. 用QImage解决警告

首先写一个demo:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPushButton>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout = new QVBoxLayout(ui->centralwidget);
    QPushButton *button = new QPushButton(this);
    layout->addWidget(button);

    // 按钮的图像
    QPixmap pixmap("D:\\resource\\3.png");
    pixmap = pixmap.scaled(200,200);
    button->setIcon(pixmap);
    button->setIconSize(pixmap.size());
}

MainWindow::~MainWindow()
{
    delete ui;
}

加载一张会引起警告的图片,然后运行:

在应用程序输出中有报错:

按照网络中的办法,用QImage加载保存一下就可以。

添加了一段代码,尝试解决:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPushButton>
#include <QVBoxLayout>
#include <QImage>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QVBoxLayout *layout = new QVBoxLayout(ui->centralwidget);
    QPushButton *button = new QPushButton(this);
    layout->addWidget(button);

    QImage image;
    image.load("D:\\resource\\3.png");
    image.save("D:\\resource\\test.png", "PNG");

    // 按钮的图像
    QPixmap pixmap("D:\\resource\\test.png");
    pixmap = pixmap.scaled(200,200);
    button->setIcon(pixmap);
    button->setIconSize(pixmap.size());
}

MainWindow::~MainWindow()
{
    delete ui;
}

结果还是有报错:

 

以前在Qt5中试过,可行,目前换到Qt6.8中,此方法已经失效了。

 3. 修复 PNG 文件

使用工具修复图片的 ICC 配置文件。

ImageMagick

 下载链接: ImageMagick – Download

运行以下命令重生成图片的 sRGB 配置文件:

magick convert input.png -strip output.png

这会移除图片的嵌入配置文件,并重新生成符合标准的文件。

验证:

安装ImageMagick

安装完毕后,查看版本号:

环境变量已写入。运行命令:

PS D:\resource> magick convert 3.png -strip test.png

 在本地目录生成成功,然后重新运行Qt代码(给按钮设置ICON):

    QVBoxLayout *layout = new QVBoxLayout(ui->centralwidget);
    QPushButton *button = new QPushButton(this);
    layout->addWidget(button);

    // 按钮的图像
    QPixmap pixmap("D:\\resource\\test.png");
    pixmap = pixmap.scaled(200,200);
    button->setIcon(pixmap);
    button->setIconSize(pixmap.size());

运行结果:

发现输出中已经没有警告了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值