Класс QImageWriter
Класс QImageWriter предоставляет независимый от формата интерфейс для записи изображений в файлы или другие устройства. Подробнее...
| Заголовок: | #include <QImageWriter> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Примечание: Все функции в этом классе являются реентерабельными.
Типы public
| перечисление | ImageWriterError { DeviceError, UnsupportedFormatError, InvalidImageError, UnknownError } |
Функции public
| QImageWriter(const QString &fileName, const QByteArray &format = QByteArray()) | |
| QImageWriter(QIODevice *device, const QByteArray &format) | |
| QImageWriter() | |
| ~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) |
Статические public члены
| QList<QByteArray> | imageFormatsForMimeType(const QByteArray &mimeType) |
| QList<QByteArray> | supportedImageFormats() |
| QList<QByteArray> | supportedMimeTypes() |
Подробное описание
QImageWriter поддерживает настройку параметров, специфичных для формата, таких как уровень сжатия и качество, перед сохранением изображения. Если вам не нужны такие параметры, вы можете использовать QImage::save() или QPixmap::save() вместо этого.
Чтобы сохранить изображение, начните с создания объекта QImageWriter. Передайте либо имя файла, либо указатель на устройство, а также формат изображения в конструктор QImageWriter. Затем вы можете установить несколько параметров, таких как качество (вызвав setQuality()). canWrite() возвращает true, если QImageWriter может записать изображение (то есть формат изображения поддерживается, и устройство открыто для записи). Вызовите 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.
Документация по типам членов
перечисление QImageWriter::ImageWriterError
Это перечисление описывает ошибки, которые могут возникнуть при записи изображений с помощью QImageWriter.
| Постоянная | Значение | Описание |
|---|---|---|
QImageWriter::DeviceError |
1 |
QImageWriter столкнулся с ошибкой устройства при записи данных изображения. Обратитесь к вашему устройству за дополнительными сведениями о возникшей проблеме. |
QImageWriter::UnsupportedFormatError |
2 |
Qt не поддерживает требуемый формат изображения. |
QImageWriter::InvalidImageError |
3 |
Была предпринята попытка записи недопустимого QImage. Примером недействительного изображения будет нулевой QImage. |
QImageWriter::UnknownError |
0 |
Произошла неизвестная ошибка. Если вы получите это значение после вызова write(), скорее всего, это вызвано ошибкой в QImageWriter. |
Документация по функциям-членам
QImageWriter::QImageWriter(const QString &fileName, const QByteArray &format = QByteArray())
Создаёт объект QImageWriter, который будет записывать в файл с именем fileName, используя формат изображения format. Если format не указан, QImageWriter определит формат изображения, проанализировав расширение fileName.
QImageWriter::QImageWriter(QIODevice *device, const QByteArray &format)
Создаёт объект QImageWriter, используя устройство device и формат изображения format.
QImageWriter::QImageWriter()
Создаёт пустой объект QImageWriter. Перед записью необходимо вызвать setFormat() для установки формата изображения, а затем setDevice() или setFileName().
QImageWriter::~QImageWriter()
Деструктор объекта QImageWriter.
bool QImageWriter::canWrite() const
Возвращает true, если QImageWriter может записать изображение; т.е., формат изображения поддерживается и назначенное устройство открыто для чтения.
См. также 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
Если текущее назначенное устройство является объектом QFile, или если был вызван setFileName(), эта функция возвращает имя файла, в который записывает QImageWriter. В противном случае (т.е., если устройство не назначено или устройство не является QFile), возвращается пустая строка QString.
См. также setFileName() и setDevice().
QByteArray QImageWriter::format() const
Возвращает формат, используемый QImageWriter для записи изображений.
См. также setFormat().
[static, since 5.12] QList<QByteArray> QImageWriter::imageFormatsForMimeType(const QByteArray &mimeType)
Возвращает список форматов изображений, соответствующих mimeType.
Обратите внимание, что экземпляр QGuiApplication должен быть создан перед вызовом этой функции.
Эта функция была добавлена в Qt 5.12.
См. также supportedImageFormats() и supportedMimeTypes().
[since 5.5] bool QImageWriter::optimizedWrite() const
Возвращает, включена ли оптимизация для записи изображения.
Эта функция была добавлена в Qt 5.5.
См. также setOptimizedWrite().
[since 5.5] bool QImageWriter::progressiveScanWrite() const
Возвращает, должно ли изображение быть записано как прогрессивное изображение.
Эта функция была добавлена в Qt 5.5.
См. также setProgressiveScanWrite().
int QImageWriter::quality() const
Возвращает значение качества формата изображения.
См. также setQuality().
void QImageWriter::setCompression(int compression)
Функция, специфичная для формата изображения, устанавливающая степень сжатия изображения. Для форматов изображений, которые не поддерживают настройку сжатия, это значение игнорируется.
Диапазон значений compression зависит от формата изображения. Например, формат «tiff» поддерживает два значения: 0 (без сжатия) и 1 (сжатие LZW).
См. также compression().
void QImageWriter::setDevice(QIODevice *device)
Устанавливает устройство QImageWriter в device. Если устройство уже установлено, старое устройство удаляется из QImageWriter, в противном случае оно остается без изменений.
Если устройство ещё не открыто, QImageWriter попытается открыть устройство в режиме QIODevice::WriteOnly, вызвав open(). Обратите внимание, что это не работает для некоторых устройств, таких как 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().
[since 5.5] void QImageWriter::setOptimizedWrite(bool optimize)
Функция, специфичная для формата изображения, устанавливающая флаг optimize при записи изображений. Для форматов изображений, которые не поддерживают установку флага optimize, это значение игнорируется.
По умолчанию значение равно false.
Эта функция была добавлена в Qt 5.5.
См. также optimizedWrite().
[since 5.5] void QImageWriter::setProgressiveScanWrite(bool progressive)
Функция, специфичная для формата изображения, которая включает прогрессивную развертку при записи изображений. Для форматов изображений, которые не поддерживают флаг progressive развертки, это значение игнорируется.
По умолчанию значение равно false.
Эта функция была добавлена в Qt 5.5.
См. также progressiveScanWrite().
void QImageWriter::setQuality(int quality)
Устанавливает значение качества формата изображения в quality.
Некоторые форматы изображений, особенно с потерей качества, предполагают компромисс между a) визуальным качеством результирующего изображения и b) временем выполнения кодирования и уровнем сжатия. Эта функция устанавливает уровень этого компромисса для форматов изображений, которые его поддерживают. Для других форматов это значение игнорируется.
Диапазон значений quality зависит от формата изображения. Например, формат «jpeg» поддерживает диапазон качества от 0 (низкое визуальное качество, высокое сжатие) до 100 (высокое визуальное качество, низкое сжатие).
См. также quality().
[since 5.4] 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); Эта функция была добавлена в Qt 5.4.
См. также 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); Если вы хотите сохранить один блок данных (например, комментарий), вы можете передать пустой ключ или использовать общий ключ, например, «Описание».
Ключ и текст будут встроены в данные изображения после вызова write().
Поддержка этого варианта реализована через QImageIOHandler::Description.
См. также QImage::setText() и QImageReader::text().
[since 5.5] void QImageWriter::setTransformation(QImageIOHandler::Transformations transform)
Устанавливает метаданные преобразований изображения, включая ориентацию, в transform.
Если метаданные преобразований не поддерживаются форматом изображения, преобразование применяется перед записью.
Эта функция была введена в Qt 5.5.
См. также transformation() и write().
[since 5.4] QByteArray QImageWriter::subType() const
Возвращает подтип изображения.
Эта функция была введена в Qt 5.4.
См. также setSubType().
[static] QList<QByteArray> QImageWriter::supportedImageFormats()
Возвращает список форматов изображений, поддерживаемых QImageWriter.
По умолчанию Qt может записывать следующие форматы:
| Формат | MIME-тип | Описание |
|---|---|---|
| BMP | image/bmp | Растровое изображение Windows |
| JPG | image/jpeg | Формат JPEG (Joint Photographic Experts Group) |
| PNG | image/png | Формат PNG (Portable Network Graphics) |
| PBM | image/x-portable-bitmap | Переносной растровый формат |
| PGM | image/x-portable-graymap | Переносной формат серого уровня |
| PPM | image/x-portable-pixmap | Переносной формат растрового изображения |
| XBM | image/x-xbitmap | Растровое изображение X11 |
| XPM | image/x-xpixmap | Растровое изображение X11 |
Чтение и запись файлов SVG поддерживаются через модуль Qt SVG. Модуль Qt Image Formats предоставляет поддержку дополнительных форматов изображений.
Обратите внимание, что экземпляр QApplication должен быть создан перед вызовом этой функции.
См. также setFormat(), QImageReader::supportedImageFormats() и QImageIOPlugin.
[static] QList<QByteArray> QImageWriter::supportedMimeTypes()
Возвращает список MIME-типов, поддерживаемых QImageWriter.
Обратите внимание, что экземпляр QApplication должен быть создан перед вызовом этой функции.
См. также supportedImageFormats() и QImageReader::supportedMimeTypes().
[since 5.4] QList<QByteArray> QImageWriter::supportedSubTypes() const
Возвращает список подтипов, поддерживаемых изображением.
Эта функция была введена в Qt 5.4.
bool QImageWriter::supportsOption(QImageIOHandler::ImageOption option) const
Возвращает true , если писатель поддерживает option; в противном случае возвращает false.
Различные форматы изображений поддерживают разные параметры. Вызовите эту функцию, чтобы определить, поддерживается ли определённый параметр текущим форматом. Например, формат PNG позволяет встраивать текст в метаданные изображения (см. text()).
QImageWriter writer(fileName);
if (writer.supportsOption(QImageIOHandler::Description))
writer.setText("Author", "John Smith"); Параметры могут быть проверены после того, как писатель был связан с форматом.
См. также QImageReader::supportsOption() и setFormat().
[since 5.5] QImageIOHandler::Transformations QImageWriter::transformation() const
Возвращает преобразование и ориентацию, к которым было установлено изображение для записи.
Эта функция была введена в Qt 5.5.
См. также setTransformation().
bool QImageWriter::write(const QImage &image)
Записывает изображение image в назначенное устройство или имя файла. Возвращает true при успехе; в противном случае возвращает false. Если операция завершилась неудачно, вы можете вызвать error(), чтобы определить тип возникшей ошибки, или errorString(), чтобы получить удобочитаемое описание ошибки.
См. также canWrite(), error() и errorString().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qimagewriter.html