Шаг 196.
Библиотека PyQt5.
Работа с графикой. Работа с изображениями. Класс QImage
На этом шаге мы рассмотрим назначение, форматы конструктора и основные методы этого класса.
Класс QImage предназначен для работы с изображениями в контекстно-независимом представлении. Иерархия наследования:
Поскольку класс QImage наследует класс QPaintDevice, мы можем использовать его как поверхность для рисования. Однако следует
учитывать, что не на всех форматах изображения можно рисовать, - для рисования лучше использовать изображение формата
Format_ARGB32_Premultiplied. Вывести изображение позволяет метод drawImage() класса QPainter (см. 190 шаг).
Форматы конструктора класса:
<Объект> = QImage()
<Объект> = QImage(<Ширина>, <Высота>, <Формат>)
<Объект> = QImage(<QSize>, <Формат>)
<Объект> = QImage(<Путь к файлу>[, <Тип изображения>])
<Объект> = QImage(<QImage>)
Первый конструктор создает пустой объект изображения. Второй и третий конструкторы позволяют указать размеры изображения - если таковые равны нулю,
будет создан пустой объект. Четвертый конструктор предназначен для загрузки изображения из файла. Во втором параметре указывается тип изображения в виде строки - если
он не указан, формат будет определен по расширению загружаемого файла. Пятый конструктор создает копию изображения.
В параметре <Формат> можно указать следующие атрибуты класса QImage (здесь приведены только основные - полный их список доступен на странице
https://doc.qt.io/qt-5/qimage.html#Format-enum):
- Format_Invalid (или 0) - неверный формат;
- Format_Mono (или 1) - глубина цвета 1 бит;
- Format_MonoLSB (или 2) - глубина цвета 1 бит;
- Format_Indexed8 (или 3) - глубина цвета 8 битов;
- Format_RGB32 (или 4) - RGB без альфа-канала, глубина цвета 32 бита;
- Format_ARGB32 (или 5) - RGB с альфа-каналом, глубина цвета 32 бита;
- Fomat_ARGB32_Premultiplied (или 6) - RGB с альфа-каналом, глубина цвета 32 бита. Этот формат лучше использовать для рисования.
Класс QImage поддерживает большое количество методов, из которых мы рассмотрим лишь основные (полный их список приведен на странице
https://doc.qt.io/qt-5/qimage.html):
- isNull () - возвращает значение True, если объект является пустым, и False - в противном случае;
- lоаd (<Путь к файлу>[, format=None]) - загружает изображение из файла. В первом параметре задается абсолютный или относительный путь к файлу. Во втором параметре
указывается формат файла в виде строки - если он не указан, формат определяется по расширению файла. Метод возвращает значение True, если изображение успешно загружено, и False - в противном случае;
- loadFromData (<QByteArray>[, fomat=None]) - загружает изображение из экземпляра класса QByteArray. В первом параметре можно указать данные, имеющие тип bytes. Во
втором параметре указывается тип изображения в виде строки (например, "PNG"). Метод возвращает значение True, если изображение успешно загружено, и False - в противном случае;
- fromData (<QByteArray> [, format=None]) - загружает изображение из экземпляра класса QByteArray. В первом параметре можно указать данные, имеющие тип bytes. Во втором
параметре указывается тип изображения в виде строки (например, "PNG"). Метод возвращает экземпляр класса QImage. Метод является статическим;
- save (<Путь к файлу>[, format=None] [, quality=-1]) - сохраняет изображение в файл. В первом параметре указывается абсолютный или относительный путь к файлу. Во втором параметре можно задать
формат файла в виде строки - если он не указан, формат определяется по расширению файла. Необязательный параметр quality позволяет задать качество изображения. Можно передать значение в диапазоне от 0 до 100.
Метод возвращает значение True, если изображение успешно сохранено, и False - в противном случае;
- fill (<Цвет>) - производит заливку изображения определенным цветом. В качестве параметра указывается атрибут цвета (например, QtCcore.Qt.white), экземпляр класса QColor или
целочисленное значение цвета, получить которое позволяют методы rgb() и rgba() класса QColor. Примеры:
img.fill(QtCore.Qt.red)
img.fill(QtGui.QColor("#ff0000"))
img.fill(QtGui.QColor("#ff0000").rgb())
- width () - возвращает ширину изображения;
- height () - возвращает высоту изображения;
- size () - возвращает экземпляр класса QSize с размерами изображения;
- rect () - возвращает экземпляр класса QRect с координатами и размерами прямоугольной области, ограничивающей изображение;
- depth () - возвращает глубину цвета;
- format () - возвращает формат изображения (см. значения параметра <Формат> в конструкторе класса QImage);
- setPixel () - задает цвет указанного пикселя. Форматы метода:
setPixel(<Х>, <У>, <Индекс или цвет>)
setPixel(<QPoint>, <Индекс или цвет>)
В параметре <Индекс или цвет> для 8-битных изображений задается индекс цвета в палитре, а для 32-битных - целочисленное значение цвета, получить которое позволяют методы
rgb() и rgba() класса QColor;
- pixel () - возвращает целочисленное значение цвета указанного пикселя. Это значение можно передать конструктору класса QColor, а затем получить значения различных
составляющих цвета. Форматы метода:
pixel(<X>, <Y>)
pixel(<QPoint>)
- convertToFormat () - преобразует формат изображения (см. значения параметра <Формат> в конструкторе класса QImage) и возвращает новый
экземпляр класса QImage. Исходное изображение не изменяется. Форматы метода:
convertToFormat(<Формат>[, flags=AutoColor])
convertToFormat(<Формат>, <Таблица цветов>[, flags=AutoColor])
- copy () - возвращает экземпляр класса QImage с фрагментом изображения. Если параметр rect не указан, изображение копируется полностью. Форматы метода:
copy([rect=QRect()])
copy(<Х>, <Y>, <Ширина>, <Высота>)
- scaled () - изменяет размер изображения и возвращает результат в виде экземпляра класса QImage. Исходное изображение не изменяется. Форматы метода:
scaled(<Ширина>, <Высота>[, aspectRatioMode=IgnoreAspectRatio][,
transformMode=FastTransformation])
scaled(<QSize>[, aspectRatioMode=IgnoreAspectRatio][,
transformMode=FastTransformation])
В необязательном параметре aspectRatioMode могут быть указаны следующие атрибуты из класса QtCore.Qt:
- IgnoreAspectRatio (или 0) - изменяет размеры без сохранения пропорций сторон;
- KeepAspectRatio (или 1) - изменяет размеры с сохранением пропорций сторон. При этом часть области нового изображения может оказаться незаполненной;
- KeepAspectRatioByExpanding (или 2) - изменяет размеры с сохранением пропорций сторон. При этом часть нового изображения может выйти за пределы его области.
В необязательном параметре transformMode могут быть указаны следующие атрибуты класса QtCore.Qt:
- FastTransformation (или 0) - сглаживание выключено;
- SmoothTransformation (или 1) - сглаживание включено;
- scaledToWidth (<IШирина>[, mode=FastTransformation]) - изменяет ширину изображения и возвращает результат в виде экземпляра класса QImage. Высота изображения
изменяется пропорционально. Исходное изображение не изменяется. Параметр mode аналогичен параметру transformMode в методе scaled();
- scaledToHeight (<Высота>[, mode=FastTransformation]) - изменяет высоту изображения и возвращает результат в виде экземпляра класса QImage. Ширина изображения
изменяется пропорционально. Исходное изображение не изменяется. Параметр mode аналогичен параметру transforrnMode в методе scaled();
- transformed (<QTransform>[, mode=FastTransformation]) - производит трансформацию изображения (например, поворот) и возвращает результат в виде экземпляра класса QImage.
Исходное изображение не изменяется. Трансформация задается с помощью экземпляра класса QTransform. Параметр mode аналогичен параметру transformMode в методе scaled();
- invertPixeis ([mode=invertRgb]) - инвертирует значения всех пикселей в изображении. В необязательном параметре mode может быть указан атрибут InvertRgb или InvertRgba класса QImage;
- mirrored ([horizontal=False][, vertical=True]) - создает зеркальный образ изображения. Метод возвращает экземпляр класса QImage. Исходное изображение не изменяется.
На следующем шаге мы рассмотрим класс QIcon.
Предыдущий шаг
Содержание
Следующий шаг