Шаг 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.
Предыдущий шаг  Содержание
 
Содержание  Следующий шаг
 
Следующий шаг