1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import PIL.Image
- import PIL.ImageEnhance
- from qtpy import QtWidgets
- from qtpy.QtCore import Qt
- from qtpy.QtGui import QImage
- class BrightnessContrastDialog(QtWidgets.QDialog):
- def __init__(self, img, callback, parent=None):
- super(BrightnessContrastDialog, self).__init__(parent)
- self.setModal(True)
- self.setWindowTitle("Brightness/Contrast")
- self.slider_brightness, widget_brightness = self._create_slider()
- self.slider_contrast, widget_contrast = self._create_slider()
- form_layout = QtWidgets.QFormLayout()
- form_layout.addRow(self.tr("Brightness"), widget_brightness)
- form_layout.addRow(self.tr("Contrast"), widget_contrast)
- self.setLayout(form_layout)
- assert isinstance(img, PIL.Image.Image)
- self.img = img
- self.callback = callback
- def onNewValue(self, _):
- brightness = self.slider_brightness.value() / 50.0
- contrast = self.slider_contrast.value() / 50.0
- img = self.img
- if brightness != 1:
- img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
- if contrast != 1:
- img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
- qimage = QImage(img.tobytes(), img.width, img.height, QImage.Format_RGB888)
- self.callback(qimage)
- def _create_slider(self):
- slider = QtWidgets.QSlider(Qt.Horizontal)
- slider.setRange(0, 150)
- slider.setValue(50)
- slider.valueChanged.connect(self.onNewValue)
- value_label = QtWidgets.QLabel(f"{slider.value() / 50:.2f}")
- slider.valueChanged.connect(
- lambda value: value_label.setText(f"{value / 50:.2f}")
- )
- layout = QtWidgets.QHBoxLayout()
- layout.addWidget(slider)
- layout.addWidget(value_label)
- widget = QtWidgets.QWidget()
- widget.setLayout(layout)
- return slider, widget
|