brightness_contrast_dialog.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from qtpy.QtCore import Qt
  2. from qtpy import QtGui
  3. from qtpy import QtWidgets
  4. from PIL import Image
  5. from PIL import ImageEnhance
  6. class BrightnessContrastDialog(QtWidgets.QDialog):
  7. def __init__(self, filename, callback, parent=None):
  8. super(BrightnessContrastDialog, self).__init__(parent)
  9. self.setModal(True)
  10. self.setWindowTitle("Brightness/Contrast")
  11. self.slider_brightness = self._create_slider()
  12. self.slider_contrast = self._create_slider()
  13. formLayout = QtWidgets.QFormLayout()
  14. formLayout.addRow(self.tr("Brightness"), self.slider_brightness)
  15. formLayout.addRow(self.tr("Contrast"), self.slider_contrast)
  16. self.setLayout(formLayout)
  17. self.img = Image.open(filename).convert("RGBA")
  18. self.callback = callback
  19. def onNewValue(self, value):
  20. brightness = self.slider_brightness.value() / 100.0
  21. contrast = self.slider_contrast.value() / 100.0
  22. img = self.img
  23. img = ImageEnhance.Brightness(img).enhance(brightness)
  24. img = ImageEnhance.Contrast(img).enhance(contrast)
  25. bytes = img.tobytes("raw", "RGBA")
  26. qimage = QtGui.QImage(
  27. bytes, img.size[0], img.size[1], QtGui.QImage.Format_RGB32
  28. ).rgbSwapped()
  29. self.callback(qimage)
  30. def _create_slider(self):
  31. slider = QtWidgets.QSlider(Qt.Horizontal)
  32. slider.setRange(0, 300)
  33. slider.setValue(100)
  34. slider.valueChanged.connect(self.onNewValue)
  35. return slider