- A propos de QPixmap
- Importation de QPixmap et affichage d'une image
- Afficher une Image avec QPixmap selon l'approche objet
- Redimensionner une Image avec QPixmap
- Charger une Image à Partir de Données Brutes (Bytes)
- Sauvegarder une Image avec QPixmap
- Utiliser QPixmap pour Dessiner
- Manipuler la Transparence avec QPixmap
- Liste des méthodes associées à QPixmap
1. A propos de QPixmap
La classe QPixmap est un périphérique de dessin hors écran basé sur des pixels.
QPixmap est l'une des deux classes que PyQt fournit pour le traitement des images ; l'autre est QImage. QPixmap est conçue et optimisée pour le dessin ; QImage est conçue et optimisée pour les E/S et pour l'accès/la manipulation directe des pixels.
Une utilisation courante de la classe QPixmap est de permettre une mise à jour fluide des widgets.
Vous pouvez facilement afficher un QPixmap à l'écran en utilisant QLabel.setPixmap(). Par exemple, toutes les sous-classes de QPushButton prennent en charge l'utilisation de pixmap.
2. Importation de QPixmap et affichage d'une image
Pour insérer une image sur une fenêtre PyQt5 on doit procéder de la manière suivante:
- Importation de QPixmap : La classe QPixmap peut être importée depuis PyQt5.QtGui
- Création d'un objet QPixmap : La création de tel objet se fait via une instanciation sur la classe QPixmap
- Utilisation de la méthode setPixmap : Associer l'objet d'instance QPixmap à un QLabel via la méthode setPixmap()
Exemple
Créons maintenant un dossier nommé 'images/' et mettons au sein duquel une image 'laptop.png' et créons ensuite un fichier python pour visualiser l'image:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QPixmap import sys app = QApplication(sys.argv) root = QWidget() root.setGeometry(100 , 100 , 500 , 300) # create a QPixmap object qpixmap = QPixmap("./images/laptop.png") # creat a QLabel for image lbl_img = QLabel(root) lbl_img.setGeometry(50 , 20 , 300 , 300) lbl_img.setPixmap(qpixmap) root.show() sys.exit(app.exec_()) |
3. Afficher une Image avec QPixmap selon l'approche objet
Nous alons voir maintenant comment utiliser QPixmap selon l'approche objet. A cet effet nous procédons de la même manière que ci-dessus mais en endossant le code dans une classe Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from PyQt5.QtWidgets import QApplication, QWidget, QLabel from PyQt5.QtGui import QPixmap import sys class MyApp(QWidget): def __init__(self): super().__init__() def initUI(self): self.setWindowTitle("Insert Image With OPixmap") self.setGeometry(100, 100, 700, 500) # création d'un QLabel pour saisir l'image lbl_image = QLabel(self) lbl_image.setGeometry(20, 20, 600, 400) # Créer un objet QPixmap en précisant le chemin vers l'image chemin_image = "./images/laptop.png" pixmap = QPixmap(chemin_image ) # Insérer l'image au sein du label lbl_image.setPixmap(pixmap) if __name__ == '__main__': app = QApplication([]) # création d'un objet d'instance myapp = MyApp() myapp.initUI() myapp.show() sys.exit(app.exec_()) |
NB: N'oublier pas de créer un répertoire './images' dans le même endroit du fichier de code python et d'y insérer une image nommée 'laptop.png'
4. Redimensionner une Image avec QPixmap
Il est souvent utile de redimensionner l'image pour qu'elle s'adapte au widget. Utilisez la méthode scaled().
1 2 3 |
# Redimensionner l'image à 100x100 pixels pixmap_resized = pixmap.scaled(100, 100) label.setPixmap(pixmap_resized) |
5. Charger une Image à Partir de Données Brutes (Bytes)
Pour charger une image à partir de données brutes (comme une image téléchargée), utilisez loadFromData.
1 2 3 4 5 6 7 8 9 10 |
import requests # Télécharger une image depuis Internet url = "https://example.com/image.jpg" response = requests.get(url) # Charger l'image depuis les données brutes pixmap = QPixmap() pixmap.loadFromData(response.content) label.setPixmap(pixmap) |
6. Sauvegarder une Image avec QPixmap
Si vous voulez enregistrer une image après l'avoir modifiée, utilisez save().
1 2 |
# Sauvegarder l'image au format PNG pixmap.save("output_image.png", "PNG") |
7. Utiliser QPixmap pour Dessiner
QPixmap peut être utilisé comme toile de dessin en utilisant un QPainter pour dessiner des formes ou du texte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from PyQt5.QtGui import QPainter, QColor # Créer un QPixmap vide de 300x300 pixels pixmap = QPixmap(300, 300) pixmap.fill(QColor("white")) # Remplir le fond en blanc # Initialiser le QPainter painter = QPainter(pixmap) # Dessiner un rectangle painter.setPen(QColor("blue")) painter.drawRect(50, 50, 100, 100) # Dessiner du texte painter.setPen(QColor("black")) painter.drawText(70, 70, "Hello QPixmap") # Terminer le dessin painter.end() # Afficher le QPixmap dans un QLabel label.setPixmap(pixmap) |
8. Manipuler la Transparence avec QPixmap
Vous pouvez ajuster l’opacité de QPixmap en utilisant setOpacity avec QPainter.
1 2 |
painter.setOpacity(0.5) # Opacité à 50% painter.drawPixmap(0, 0, pixmap) |
Exemple Complet
Voici un programme complet avec plusieurs fonctionnalités:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import sys import requests from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout from PyQt5.QtGui import QPixmap, QPainter, QColor class ImageApp(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QPixmap Avancé") self.setGeometry(100, 100, 400, 400) layout = QVBoxLayout() # Charger une image depuis une URL url = "https://example.com/image.jpg" response = requests.get(url) pixmap = QPixmap() pixmap.loadFromData(response.content) # Redimensionner l'image pixmap_resized = pixmap.scaled(200, 200) # Créer un QLabel pour afficher l'image redimensionnée label = QLabel(self) label.setPixmap(pixmap_resized) layout.addWidget(label) # Dessiner sur le QPixmap pixmap_with_drawing = QPixmap(300, 300) pixmap_with_drawing.fill(QColor("white")) painter = QPainter(pixmap_with_drawing) painter.setPen(QColor("blue")) painter.drawRect(50, 50, 100, 100) painter.setPen(QColor("black")) painter.drawText(70, 70, "Exemple de dessin") painter.end() label_drawing = QLabel(self) label_drawing.setPixmap(pixmap_with_drawing) layout.addWidget(label_drawing) # Sauvegarder l'image pixmap_with_drawing.save("output_image.png", "PNG") self.setLayout(layout) # Initialiser l'application app = QApplication(sys.argv) window = ImageApp() window.show() sys.exit(app.exec_()) |
9. Liste des méthodes associées à QPixmap
La classe QPixmap est dotée de nombreuses méthodes permettent de manipuler et d’afficher des images de manière efficace dans une application PyQt.
Voici une liste des méthodes courantes associées à la classe QPixmap:
Constructeurs et méthodes de création:
- QPixmap() : crée un QPixmap vide.
- QPixmap(int width, int height) : crée un QPixmap avec une largeur et hauteur spécifiées.
- QPixmap(const QString &filename) : charge une image depuis un fichier.
Chargement et sauvegarde :
- load(const QString &filename, const char *format = nullptr) : charge une image depuis un fichier.
- loadFromData(const QByteArray &data, const char *format = nullptr) : charge une image depuis des données binaires.
- save(const QString &filename, const char *format = nullptr) : enregistre le QPixmap dans un fichier.
Propriétés de dimension et d'information:
- width() : retourne la largeur du QPixmap.
- height() : retourne la hauteur du QPixmap.
- size() : retourne la taille du QPixmap.
- rect() : retourne le rectangle englobant du QPixmap.
- depth() : retourne la profondeur en bits du QPixmap.
Manipulation et dessin:
- fill(const QColor &color = Qt: white) : remplit le QPixmap avec une couleur spécifiée.
- scaled(int width, int height, Qt: AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) : retourne un QPixmap redimensionné.
- transformed(const QTransform &matrix, Qt: TransformationMode mode = Qt::FastTransformation) : applique une transformation au QPixmap.
Masques et transparence:
- mask() : retourne le masque de transparence.
- setMask(const QBitmap &mask) : applique un masque de transparence.
- createHeuristicMask(bool clipTight = true) : crée un masque de transparence basé sur les pixels non transparents.
- createMaskFromColor(const QColor &maskColor, Qt: MaskMode mode = Qt::MaskInColor) : crée un masque à partir d’une couleur spécifique.
Optimisation et gestion de la mémoire:
- setOptimization(QPixmap: Optimization optimization) : définit les paramètres d'optimisation.
- isDetached() : vérifie si le QPixmap est détaché.
- detach() : détache le QPixmap pour en faire une copie indépendante.
Autres méthodes utiles:
- isNull() : vérifie si le QPixmap est vide.
- convertToImage() : convertit le QPixmap en QImage.
- scroll(int dx, int dy, const QRect &rect) : déplace le contenu du QPixmap.
- swap(QPixmap &other) : échange les données de ce QPixmap avec un autre.
Younes Derfoufi
CRMEF OUJDA