简述

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

最新文章

  1. Make github as your personal maven repository
  2. Redmined的历史记录显示 &quot;Updated by {{author}} {{age}} ago&quot;
  3. android 颜色对照
  4. September 11th 2016 Week 38th Sunday
  5. php浮点数计算问题
  6. 我所了解的cgi(转)
  7. linux shell 单引号 双引号 反引号的区别
  8. zeromq
  9. Struts2运行流程分析
  10. volicety常用方法
  11. css关于宽度
  12. Python httpsqs封装类
  13. Windows下文件或文件夹不能删除时的解决办法
  14. ASP文件上传代码
  15. Python爬虫01——第一个小爬虫
  16. [poj3252]Round Numbers_数位dp
  17. 对Java配置文件中敏感信息进行加解密的工具类
  18. find、which、whereis、locate和type之间的区别
  19. BZOJ5262(容斥)
  20. mac os系统go安装:go install github.com/nsf/gocode: open /usr/local/go/bin/gocode: permission denied

热门文章

  1. Linux下安装Solr7.5.0,并部署到Tomcat
  2. 半虚拟化驱动virtio-Windows
  3. 打包成ipa包
  4. js本地对象——Date()
  5. linux 上安装 redis
  6. WinServer-AD域控入门
  7. ida动态调试so,在init_array和JNI_ONLOAD处下断点
  8. 第一个python作业题目以及代码
  9. 【翻译自mos文章】怎么正确的计算一个ip地址的subnet id?
  10. C++语言笔记系列之十八——虚函数(1)