brightness_contrast_dialog.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import PIL.Image
  2. import PIL.ImageEnhance
  3. from qtpy import QtGui
  4. from qtpy import QtWidgets
  5. from qtpy.QtCore import Qt
  6. from .. import utils
  7. class BrightnessContrastDialog(QtWidgets.QDialog):
  8. def __init__(self, img, callback, parent=None):
  9. super(BrightnessContrastDialog, self).__init__(parent)
  10. self.setModal(True)
  11. self.setWindowTitle("Brightness/Contrast")
  12. self.slider_brightness = self._create_slider()
  13. self.slider_contrast = self._create_slider()
  14. formLayout = QtWidgets.QFormLayout()
  15. formLayout.addRow(self.tr("Brightness"), self.slider_brightness)
  16. formLayout.addRow(self.tr("Contrast"), self.slider_contrast)
  17. self.setLayout(formLayout)
  18. assert isinstance(img, PIL.Image.Image)
  19. self.img = img
  20. self.callback = callback
  21. def onNewValue(self, value):
  22. brightness = self.slider_brightness.value() / 50.0
  23. contrast = self.slider_contrast.value() / 50.0
  24. img = self.img
  25. img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
  26. img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
  27. img_data = utils.img_pil_to_data(img)
  28. qimage = QtGui.QImage.fromData(img_data)
  29. self.callback(qimage)
  30. def _create_slider(self):
  31. slider = QtWidgets.QSlider(Qt.Horizontal)
  32. slider.setRange(0, 150)
  33. slider.setValue(50)
  34. slider.valueChanged.connect(self.onNewValue)
  35. return slider