本页内容

QImageWriter Class

QImageWriter 类提供了一个与格式无关的接口,用于将图像写入文件或其他设备。更多内容...

头文件: #include <QImageWriter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

注意:该类中的所有函数均为可重入函数。

公共类型

enum ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError }

公共函数

QImageWriter()
QImageWriter(QIODevice *device, const QByteArray &format)
QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
~QImageWriter()
bool canWrite() const
int compression() const
QIODevice *device() const
QImageWriter::ImageWriterError error() const
QString errorString() const
QString fileName() const
QByteArray format() const
bool optimizedWrite() const
bool progressiveScanWrite() const
int quality() const
void setCompression(int compression)
void setDevice(QIODevice *device)
void setFileName(const QString &fileName)
void setFormat(const QByteArray &format)
void setOptimizedWrite(bool optimize)
void setProgressiveScanWrite(bool progressive)
void setQuality(int quality)
void setSubType(const QByteArray &type)
void setText(const QString &key, const QString &text)
void setTransformation(QImageIOHandler::Transformations transform)
QByteArray subType() const
QList<QByteArray> supportedSubTypes() const
bool supportsOption(QImageIOHandler::ImageOption option) const
QImageIOHandler::Transformations transformation() const
bool write(const QImage &image)

静态公共成员

QList<QByteArray> imageFormatsForMimeType(const QByteArray &mimeType)
QList<QByteArray> supportedImageFormats()
QList<QByteArray> supportedMimeTypes()

详细说明

QImageWriter 支持在存储图像之前设置格式相关的选项,例如压缩级别和质量。如果您不需要这些选项,可以使用QImage::save() 或QPixmap::save() 代替。

要存储图像,首先需要构建一个 QImageWriter 对象。向 QImageWriter 的构造函数传递文件名或设备指针,以及图像格式。 随后,您可以设置若干选项,例如质量(通过调用setQuality())。若 QImageWriter 能写入图像(即支持该图像格式且设备处于可写状态),canWrite() 将返回true 。调用write() 将图像写入设备。

如果在写入图像时发生任何错误,write() 将返回 false。此时,您可以调用error() 来查明发生的错误类型,或调用errorString() 获取关于出错原因的通俗描述。

调用supportedImageFormats() 可获取 QImageWriter 支持写入的格式列表。QImageWriter 除了支持所有内置图像格式外,还支持任何支持写入功能的图像格式插件。

注意:QImageWriter 会对分配的文件或设备进行独占控制。在 QImageWriter 对象的生命周期内,任何尝试修改该文件或设备的操作都将导致不可预知的结果。如果需要立即访问资源,建议使用作用域。

例如:

QString imagePath(QStringLiteral("path/image.jpeg"));
QImage image(64, 64, QImage::Format_RGB32);
image.fill(Qt::red);
{
    QImageWriter writer(imagePath);
    writer.write(image);
}

QFile::rename(imagePath,
              QStringLiteral("path/other_image.jpeg"));

另请参阅 QImageReader 、QImageIOHandler 、QImageIOPlugin 以及QColorSpace 。

成员类型文档

enum QImageWriter::ImageWriterError

此枚举描述了使用QImageWriter 写入图像时可能出现的错误。

常量值描述
QImageWriter::DeviceError1QImageWriter 写入图像数据时遇到设备错误。有关具体错误原因的详细信息,请咨询您的设备。
QImageWriter::UnsupportedFormatError2Qt 不支持所请求的图像格式。
QImageWriter::InvalidImageError3尝试写入无效的QImage 。无效图像的示例包括空的QImage 。
QImageWriter::UnknownError0发生未知错误。若在调用write() 后获得此值,则很可能是由QImageWriter 中的错误引起的。

成员函数文档

QImageWriter::QImageWriter()

创建一个空的 QImageWriter 对象。在写入之前,必须先调用setFormat() 来设置图像格式,然后调用setDevice() 或setFileName()。

[explicit] QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)

使用设备device 和图像格式format 创建一个QImageWriter对象。

[explicit] QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())

创建一个 QImageWriter 对象,该对象将使用图像格式format 将内容写入名为fileName 的文件中。如果未提供format ,QImageWriter 将通过检查fileName 的扩展名来检测图像格式。

[noexcept] QImageWriter::~QImageWriter()

销毁QImageWriter 对象。

bool QImageWriter::canWrite() const

如果QImageWriter 能写入图像,则返回true ;即,该图像格式受支持,且指定的设备处于可读状态。

另请参阅 write()、setDevice() 和setFormat()。

int QImageWriter::compression() const

返回图像的压缩率。

另请参阅 setCompression()。

QIODevice *QImageWriter::device() const

返回当前分配给QImageWriter 的设备;如果尚未分配任何设备,则返回nullptr 。

另请参阅 setDevice()。

QImageWriter::ImageWriterError QImageWriter::error() const

返回上次发生的错误类型。

另请参阅 ImageWriterError 和errorString()。

QString QImageWriter::errorString() const

返回最近发生的错误的人类可读描述。

另请参阅 error()。

QString QImageWriter::fileName() const

如果当前分配的设备是一个文件,或者已调用setFileName(),则该函数返回QImageWriter 写入的文件名。否则(即未分配任何设备或设备不是文件),则返回一个空的QString 。

另请参阅 setFileName() 和setDevice()。

QByteArray QImageWriter::format() const

返回QImageWriter 用于写入图像的格式。

另请参阅 setFormat()。

[static] QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType)

返回与mimeType 对应的图像格式列表。

请注意,必须在调用此函数之前创建QGuiApplication 实例。

另请参阅 supportedImageFormats() 和supportedMimeTypes()。

bool QImageWriter::optimizedWrite() const

返回是否已启用图像写入优化功能。

另请参阅 setOptimizedWrite()。

bool QImageWriter::progressiveScanWrite() const

返回该图像是否应作为渐进式图像写入。

另请参阅 setProgressiveScanWrite()。

int QImageWriter::quality() const

返回图像格式的质量设置。

另请参阅 setQuality()。

void QImageWriter::setCompression(int compression)

这是一个用于设置图像压缩程度的图像格式专用函数。对于不支持设置压缩程度的图像格式,该值将被忽略。

compression 的取值范围取决于图像格式:

图像格式支持的值
PNG取值范围为 0(无压缩)至 100(视觉质量较低,最大压缩)。该值与setQuality 中的质量值成反比。这两个选项互斥。
TGA0 - 不压缩
1 - RLE压缩
TIFF0 - 不压缩
1 - RLE 压缩
2 - RLE 压缩
3 - CCITT 第 3 组传真编码
4 - CCITT 第 4 组传真编码
5 - JPEG 压缩

另请参阅 compression() 和setQuality()。

void QImageWriter::setDevice(QIODevice *device)

将QImageWriter 的设备设置为device 。如果已设置了设备,则从QImageWriter 中移除旧设备,其余部分保持不变。

如果设备尚未打开,QImageWriter 将通过调用 open() 尝试以QIODeviceBase::WriteOnly 模式打开该设备。请注意,对于某些设备(例如QProcess 、QTcpSocket 和QUdpSocket ),此方法无法正常工作,因为这些设备需要更多的逻辑才能打开。

另请参阅 device() 和setFileName()。

void QImageWriter::setFileName(const QString &fileName)

将QImageWriter 的文件名设置为fileName 。在内部,QImageWriter 会创建一个QFile 并以QIODevice::WriteOnly 模式打开它,并在写入图像时使用该文件。

另请参阅 fileName() 和setDevice()。

void QImageWriter::setFormat(const QByteArray &format)

将QImageWriter 在写入图像时使用的格式设置为format 。format 是一个不区分大小写的文本字符串。示例:

QImageWriter writer;
writer.setFormat("png"); // same as writer.setFormat("PNG");

您可以调用supportedImageFormats() 获取QImageWriter 支持的所有格式列表。

另请参阅 format()。

void QImageWriter::setOptimizedWrite(bool optimize)

这是一个针对特定图像格式的函数,用于在写入图像时设置optimize 标志。对于不支持设置optimize 标志的图像格式,该值将被忽略。

默认值为 false。

另请参阅 optimizedWrite()。

void QImageWriter::setProgressiveScanWrite(bool progressive)

这是一个特定于图像格式的函数,用于在写入图像时启用progressive 扫描。对于不支持设置progressive 扫描标志的图像格式,该值将被忽略。

默认值为 false。

另请参阅 progressiveScanWrite()。

void QImageWriter::setQuality(int quality)

将图像格式的质量设置设为quality 。

某些图像格式(尤其是有损压缩格式)需要在 a) 生成的图像的视觉质量,以及 b) 编码执行时间和压缩级别之间进行权衡。对于支持此功能的图像格式,本函数用于设置该权衡的级别。对于其他格式,此值将被忽略。

quality 的取值范围取决于图像格式。例如,“jpeg”格式支持的质量范围为 0(视觉质量低,压缩率高)到 100(视觉质量高,压缩率低)。

另请参阅 quality()。

void QImageWriter::setSubType(const QByteArray &type)

这是一个特定于图像格式的函数,用于将图像的子类型设置为type 。处理程序可通过子类型来确定在保存图像时应采用哪种格式。

例如,以 DDS 格式(子类型为 A8R8G8R8)保存图像:

QImageWriter writer("some/image.dds");
if (writer.supportsOption(QImageIOHandler::SubType))
    writer.setSubType("A8R8G8B8");
writer.write(image);

另请参阅 subType()。

void QImageWriter::setText(const QString &key, const QString &text)

将与键key 关联的图像文本设置为text 。这有助于存储版权信息或有关该图像的其他信息。示例:

QImage image("some/image.jpeg");
QImageWriter writer("images/outimage.png", "png");
writer.setText("Author", "John Smith");
writer.write(image);

若要存储单块数据(例如评论),您可以传入一个空键,或使用“Description”之类的通用键。

调用write() 后,该键和文本将被嵌入到图像数据中。

此选项的支持通过QImageIOHandler::Description 实现。

另请参阅 QImage::setText() 和QImageReader::text()。

void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)

将包括方向在内的图像变换元数据设置为transform 。

如果图像格式不支持变换元数据,则会在写入前应用该变换。

另请参阅 transformation() 和write()。

QByteArray QImageWriter::subType() const

返回图像的子类型。

另请参阅 ` setSubType()`。

[static] QList<QByteArray> QImageWriter::supportedImageFormats()

返回QImageWriter 支持的图像格式列表。

默认情况下,Qt 可以写入以下格式:

格式MIME类型描述
BMPimage/bmpWindows 位图
JPGimage/jpeg联合图像专家组
PNGimage/png可移植网络图形
PBMimage/x-portable-bitmap可移植位图
PGMimage/x-portable-graymap可移植灰度图
PPMimage/x-portable-pixmap可移植点图
XBMimage/x-xbitmapX11 位图
XPMimage/x-xpixmapX11 像素图

通过 Qt SVG 模块实现。 Qt Image Formats 模块还支持其他图像格式。

请注意,在调用此函数之前,必须先创建QApplication 实例。

另请参阅 setFormat()、QImageReader::supportedImageFormats() 和QImageIOPlugin 。

[static] QList<QByteArray> QImageWriter::supportedMimeTypes()

返回QImageWriter 支持的 MIME 类型列表。

请注意,在调用此函数之前,必须先创建QApplication 实例。

另请参阅 supportedImageFormats() 和QImageReader::supportedMimeTypes()。

QList<QByteArray> QImageWriter::supportedSubTypes() const

返回图像所支持的子类型列表。

bool QImageWriter::supportsOption(QImageIOHandler::ImageOption option) const

如果写入器支持 `option`,则返回 `true `;否则返回 `false`。

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

QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
    writer.setText("Author", "John Smith");

在写入器与某种格式关联后,即可测试各项选项。

另请参阅 QImageReader::supportsOption() 和setFormat()。

QImageIOHandler::Transformations QImageWriter::transformation() const

返回图像写入时所设置的变换和方向。

另请参阅 setTransformation()。

bool QImageWriter::write(const QImage &image)

将图像image 写入指定的设备或文件。成功时返回true ;否则返回false 。如果操作失败,可以调用error() 来查明发生的错误类型,或调用errorString() 来获取错误的通俗描述。

另请参阅 canWrite()、error() 和errorString()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.