Qt之QImageWriter

简介: 简述QImageWriter类为写入图像至文件或设备提供了一个独立的接口。QImageWriter支持格式特定的选项(如:质量和压缩率),可以在存储图像之前进行设置。如果不需要这些选项,可以使用QImage::save()或QPixmap::save()代替。简述常用接口公共函数静态函数示例效果源码常用接口公共函

简述

QImageWriter类为写入图像至文件或设备提供了一个独立的接口。QImageWriter支持格式特定的选项(如:质量和压缩率),可以在存储图像之前进行设置。如果不需要这些选项,可以使用QImage::save()或QPixmap::save()代替。

常用接口

公共函数

  • void setFileName(const QString & fileName)
    为fileName设置文件名。在内部,QImageWriter将创建一个QFile,以只写模式( QIODevice::WriteOnly)打开它,并使用此文件写入图像。

  • void setFormat(const QByteArray & format)
    设置写入图像时的格式,格式不区分大小写。

QImageWriter writer;
writer.setFormat("png");  
// 同writer.setFormat("PNG");
  • void setText(const QString & key, const QString & text)
    设置与key相关的文本。用于一些有用的信息,例如:版权信息、关于图像的其它描述信息。

  • bool supportsOption(QImageIOHandler::ImageOption option) const
    如果writer支持选项option,返回true;否则返回false。

    不同的图像格式支持不同的选项。调用此函数,可以确定当前格式是否支持一个特定的选项。例如:PNG格式允许嵌入文字到图像的元数据(见text())。

QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
    writer.setText("Author", "Mr Wang");
  • void setQuality(int quality)
    设置图像格式的质量。

    quality的取值范围依赖于图像格式。例如:JPEG格式支持从0(低视觉质量,高压缩率)到100(高视觉质量,低压缩率)范围。

  • bool canWrite() const
    如果QImageWriter可以写入图像(即:图像格式支持,同时设备也可以写入)调用canWrite() 时会返回true

  • bool write(const QImage & image)
    将图像写入文件或设备,如果写入时出现任何错误,将返回false,可以调用error() 来查找发生错误的类型,或者通过errorString()获取可读性的描述。

  • ImageWriterError error() const
    返回上次发生的错误 - 错误类型。

QImageWriter::ImageWriterError枚举值:

常量 描述
QImageWriter::DeviceError 1 QImageWriter写入图像数据时遇到设备错误,详细请查看设备问题。
QImageWriter::UnsupportedFormatError 2 Qt不支持的请求图像格式。
QImageWriter::UnknownError 0 未知错误。如果调用write()后得到这个值,最有可能是QImageWriter的一个Bug。

- QString errorString() const
返回上次发生的错误 - 可读描述。

静态函数

  • QList<QByteArray> supportedImageFormats()
    获取支持的图片格式

  • QList<QByteArray> supportedMimeTypes()
    获取支持的Mime类型

QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats();
QList<QByteArray> mimeTypes = QImageWriter::supportedMimeTypes();

信息如下:

// imageFormats : ("bmp", "cur", "dds", "icns", "ico", "jp2", "jpeg", "jpg", "pbm", "pgm", "png", "ppm", "tif", "tiff", "wbmp", "webp", "xbm", "xpm")

// mimeTypes : ("", "image/bmp", "image/jp2", "image/jpeg", "image/png", "image/tiff", "image/vnd.microsoft.icon", "image/vnd.wap.wbmp", "image/webp", "image/x-dds", "image/x-icns", "image/x-portable-bitmap", "image/x-portable-graymap", "image/x-portable-pixmap", "image/x-xbitmap", "image/x-xpixmap")

示例

效果

这里写图片描述这里写图片描述

源码

// 源图像
QImage image(":/Images/logo");

// 目标图像
QImageWriter writer("AuthorLogo.jpeg", "jpeg");
if (writer.supportsOption(QImageIOHandler::Description))
{
    // 设置描述信息
    writer.setText("Author", "Mr Wang");
    writer.setText("Description", "Qter");
}
writer.setQuality(100);
if (writer.canWrite())
{
    // 写入图片至文件AuthorLogo.jpeg
    writer.write(image);
}
else
{
    // 获取错误信息
    QImageWriter::ImageWriterError error = writer.error();
    QString strError = writer.errorString();
    qDebug() << "Last Error : " << strError;
}

这时,就会根据源图像(:/Images/logo资源文件)生成一张名为AuthorLogo.jpeg的图像,并且图像里面包含”Author”“以及”Description”对应的信息。

为什么图片上看不到呢?(⊙o⊙)…这时因为保存的信息在图片的数据中,而并非直接绘制在图片上。

既然有QImageWriter,当然也会有对应的读取相关的类QImageReader,至于如何读取,敬请期待。。。下节更精彩。

注意:

  • 图一:setQuality(100),质量很高,压缩率小(很大:131KB)。
  • 图二:setQuality(0),质量很低,压缩率高(很小:9.69KB)。
目录
相关文章
|
Linux 调度 数据安全/隐私保护
Qt之QFtp
简述 QFtp 类提供了一个 FTP 协议的客户端实现。 该类提供了一个到 FTP 的直接接口,允许对请求有更多的控制。但是,对于新的应用程序,建议使用 QNetworkAccessManager 和 QNetworkReply,因为这些类拥有一个更简单、还更强大的 API。 简述 QFtp 工作流程 基本使用 连接并登录 FTP 服务器 切换工作目录 列出目
7154 1
|
7月前
|
Linux 定位技术 C++
【Qt】-学Qt前的准备
【Qt】-学Qt前的准备
|
7月前
|
前端开发 编译器 开发工具
Qt
Qt
347 0
|
存储 Cloud Native 前端开发
Qt QScrollArea使用
Qt QScrollArea使用
|
安全 Java
Qt之QThreadPool和QRunnable
简述 QRunnable 是所有 runnable 对象的基类,而 QThreadPool 类用于管理 QThreads 集合。 QRunnable 类是一个接口,用于表示一个任务或要执行的代码,需要重新实现 run() 函数。 QThreadPool 管理和循环使用单独的 QThread 对象,以帮助程序减少创建线程的成本。每个 Qt 应用程序都有一个全局 QThre
3590 0
|
存储
Qt之QUrlQuery
简述 QUrlQuery 类提供了一种方法来操纵 URL 查询中的 key-value 对。 简述 详细描述 编码 处理空格和加号 全解码 非标准分隔符 使用 QUrlQuery 分隔符 查询 删除 是否为空 详细描述 QUrlQuery 用来解析 URL 中的查询字符串,像下面这样: 上述的查询字符串在 URL 中 被用来传输
2867 0
|
索引
Qt之QToolBox
简述 QToolBox类提供了一个列(选项卡式的)部件条目。 QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。 简述 详细描述 使用 效果 源码 详细描述 每个item都有一个itemText()、一个可选的itemI
2529 0
Qt之QDateTimeEdit
简述 QDateTime类提供了一个部件,用于编辑日期和时间。 QDateTimeEdit允许用户编辑日期,通过使用键盘或箭头键来增加和减少日期和时间值。箭头键可以在QDateTimeEdit内进行部分移动,日期和时间的格式按照setDisplayFormat()设置的显示。 简述 基本使用 效果 源码 日期时间格式 效果 源码 日期时间范围 效果
2723 0