Screenshot umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cR0N0s
User
Beiträge: 19
Registriert: Sonntag 15. März 2020, 15:45

Moin Moin,

Vielleicht kann mir hier jemand weiter helfen.
Ich habe die weiten des Internets schon durchstöbert und komme nicht weiter.

Mein Problem ist, dass ich entweder mit "pyautogui" oder "PIL" einen Bildschirmabschnitt aufnehmen will und diesen Abschnitt ohne dem Umweg des speicherns weiter nutzen will.
Zum Beispiel in Pyqt Anzeigen oder auch Bildinformationen/Text usw. Bild extrahieren.

Somit stellt sich mir die Frage, kann man den Screenshot durch pyautogui oder PIL direkt so umwandeln, dass es wie ein normales Bild Objekt weiter benutzt werden kann?

Code: Alles auswählen

import pyautogui
from PIL import ImageGrab

bildausschnitt = pyautogui.screenshot(region = (100, 100, 300, 300))
print(bildausschnitt)

bildausschnitt2 = ImageGrab.grab(bbox =(100, 100, 300, 300))
print(bildausschnitt2)

Ausgabe:

<PIL.Image.Image image mode=RGB size=300x300 at 0x2A6E44C4910>
<PIL.Image.Image image mode=RGB size=200x200 at 0x2A6E44C4940>
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das doch ein Bild-Objekt, was soll denn da noch gewandelt werden?
cR0N0s
User
Beiträge: 19
Registriert: Sonntag 15. März 2020, 15:45

Wenn ich denn durch pyautogui oder PIL erzeugten Screenshot des gewünschten Abschnitts in pyqt in einem Label anzeigen will, bekomme ich folgen den Fehler.
Was wäre sonst die Lösung meines Problems, wenn keine Umwandlung nötig ist?

Code: Alles auswählen

from PyQt5 import QtCore, QtGui, QtWidgets
import pyautogui
from PIL import ImageGrab


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(822, 722)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.listWidget = QtWidgets.QListWidget(self.centralwidget)
        self.listWidget.setMaximumSize(QtCore.QSize(250, 16777215))
        self.listWidget.setObjectName("listWidget")
        self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 546, 583))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("../../../JULE/res/JULE.ico"))
        self.label.setScaledContents(False)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 1, 1, 1)
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_3.addWidget(self.lineEdit, 1, 0, 1, 1)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.gridLayout_3.addWidget(self.lineEdit_2, 1, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.groupBox)
        self.label_2.setObjectName("label_2")
        self.gridLayout_3.addWidget(self.label_2, 0, 0, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.groupBox)
        self.label_3.setObjectName("label_3")
        self.gridLayout_3.addWidget(self.label_3, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.groupBox, 1, 0, 1, 2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 822, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.bild_anzeigen()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.groupBox.setTitle(_translate("MainWindow", "GroupBox"))
        self.label_2.setText(_translate("MainWindow", "TextLabel"))
        self.label_3.setText(_translate("MainWindow", "TextLabel"))


    def bild_anzeigen(self):

        bildausschnitt = pyautogui.screenshot(region = (100, 100, 300, 300))
        print(bildausschnitt)

        bildausschnitt2 = ImageGrab.grab(bbox =(100, 100, 300, 300))
        print(bildausschnitt2)

        self.label.setPixmap(QtGui.QPixmap(bildausschnitt))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

<PIL.Image.Image image mode=RGB size=300x300 at 0x1B7A7D04910>
<PIL.Image.Image image mode=RGB size=200x200 at 0x1B7A7D04940>
Traceback (most recent call last):
File "C:\Users\cR0N0s\OneDrive\Save\Python\Autobot\ScreenShot.py", line 100, in <module>
ui.setupUi(MainWindow)
File "C:\Users\cR0N0s\OneDrive\Save\Python\Autobot\ScreenShot.py", line 74, in setupUi
self.bild_anzeigen()
File "C:\Users\cR0N0s\OneDrive\Save\Python\Autobot\ScreenShot.py", line 92, in bild_anzeigen
self.label.setPixmap(QtGui.QPixmap(bildausschnitt))
TypeError: QPixmap(): argument 1 has unexpected type 'Image'
cR0N0s
User
Beiträge: 19
Registriert: Sonntag 15. März 2020, 15:45

Hab meine Antwort gefunden und es funktioniert.

Code: Alles auswählen

from PIL import ImageGrab, ImageQt

    def bild_anzeigen(self):
        bildausschnitt2 = ImageGrab.grab(bbox =(100, 100, 300, 300))
        bildausschnitt2 = ImageQt.ImageQt(bildausschnitt2)
        print(bildausschnitt2)

        self.label.setPixmap(QtGui.QPixmap.fromImage(bildausschnitt2))

Antworten