12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import PIL.Image
- import PIL.ImageEnhance
- from qtpy import QtWidgets
- from qtpy.QtCore import Qt
- from qtpy.QtGui import QImage
- class BrightnessContrastDialog(QtWidgets.QDialog):
- _base_value = 50
- def __init__(self, img, callback, parent=None):
- super(BrightnessContrastDialog, self).__init__(parent)
- self.setModal(True)
- self.setWindowTitle("Brightness/Contrast")
- sliders = {}
- layouts = {}
- for title in ["Brightness:", "Contrast:"]:
- layout = QtWidgets.QHBoxLayout()
- title_label = QtWidgets.QLabel(self.tr(title))
- title_label.setFixedWidth(75)
- layout.addWidget(title_label)
- #
- slider = QtWidgets.QSlider(Qt.Horizontal)
- slider.setRange(0, 3 * self._base_value)
- slider.setValue(self._base_value)
- layout.addWidget(slider)
- #
- value_label = QtWidgets.QLabel(f"{slider.value() / self._base_value:.2f}")
- value_label.setAlignment(Qt.AlignRight)
- layout.addWidget(value_label)
- #
- slider.valueChanged.connect(self.onNewValue)
- slider.valueChanged.connect(
- lambda: value_label.setText(f"{slider.value() / self._base_value:.2f}")
- )
- layouts[title] = layout
- sliders[title] = slider
- self.slider_brightness = sliders["Brightness:"]
- self.slider_contrast = sliders["Contrast:"]
- del sliders
- layout = QtWidgets.QVBoxLayout()
- layout.addLayout(layouts["Brightness:"])
- layout.addLayout(layouts["Contrast:"])
- del layouts
- self.setLayout(layout)
- assert isinstance(img, PIL.Image.Image)
- self.img = img
- self.callback = callback
- def onNewValue(self, _):
- brightness = self.slider_brightness.value() / self._base_value
- contrast = self.slider_contrast.value() / self._base_value
- 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, img.width * 3, QImage.Format_RGB888
- )
- self.callback(qimage)
|