Seite 1 von 1

Screenshot umwandeln

Verfasst: Mittwoch 27. Juli 2022, 16:23
von cR0N0s
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>

Re: Screenshot umwandeln

Verfasst: Mittwoch 27. Juli 2022, 16:27
von __deets__
Das doch ein Bild-Objekt, was soll denn da noch gewandelt werden?

Re: Screenshot umwandeln

Verfasst: Mittwoch 27. Juli 2022, 16:53
von cR0N0s
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'

Re: Screenshot umwandeln

Verfasst: Mittwoch 27. Juli 2022, 17:25
von cR0N0s
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))