You can draw on top of your pixmap. Just select the composition mode that suits your purpose.
Below is a simple Tinter tool. applyTint is the interesting part. This uses the composition Overlay .
import sys from PyQt4 import QtGui, QtCore class Tinter(QtGui.QWidget): def __init__(self, image, parent=None): super(Tinter, self).__init__(parent) self.pixmap = QtGui.QPixmap(image) self.normal = QtGui.QLabel() self.normal.setPixmap(self.pixmap) self.tinted = QtGui.QLabel() self.red = QtGui.QSlider(QtCore.Qt.Horizontal) self.red.setRange(0, 255) self.red.sliderMoved.connect(self.applyTint) self.green = QtGui.QSlider(QtCore.Qt.Horizontal) self.green.setRange(0, 255) self.green.sliderMoved.connect(self.applyTint) self.blue = QtGui.QSlider(QtCore.Qt.Horizontal) self.blue.setRange(0, 255) self.blue.sliderMoved.connect(self.applyTint) self.alpha = QtGui.QSlider(QtCore.Qt.Horizontal) self.alpha.setRange(0, 255) self.alpha.setValue(128) self.alpha.sliderMoved.connect(self.applyTint) controlLayout = QtGui.QFormLayout() controlLayout.addRow('red', self.red) controlLayout.addRow('green', self.green) controlLayout.addRow('blue', self.blue) controlLayout.addRow('alpha', self.alpha) layout = QtGui.QHBoxLayout() layout.addWidget(self.normal) layout.addWidget(self.tinted) layout.addLayout(controlLayout) self.setLayout(layout) self.applyTint() def applyTint(self): temp = QtGui.QPixmap(self.pixmap) color = QtGui.QColor(self.red.value(), self.green.value(), self.blue.value(), self.alpha.value()) painter = QtGui.QPainter(temp) painter.setCompositionMode(painter.CompositionMode_Overlay) painter.fillRect(temp.rect(), color) painter.end() self.tinted.setPixmap(temp) app = QtGui.QApplication(sys.argv) main = Tinter('so.jpg') main.show() sys.exit(app.exec_())

source share