首先声明,如果转载请声明作者以及来源
第三十七例子 改变图片的透明度
首先,书上的很多列子,代码没有给全,有些代码片段是我自己加的。。。我水平不是很高,如果,有些代码加的不是合适,恳请各位大神指点!
另外,关于注释的话,书上都讲的很清楚了,我这里没有必要画蛇添足了。如果,实在有不懂的地方,麻烦告诉我,如果我懂的话,我会告诉你!
代码如下
__author__ = '375159507'
try:
from PySide import QtGui
from PySide import QtCore
except ImportError:
from PyQt4 import QtGui
from PyQt4 import QtCore
class PicTrans(QtGui.QWidget):
def __init__(self):
super(PicTrans,self).__init__()
self.img = QtGui.QImage()
self.dst = QtGui.QImage()
self.flag = False
self.new = 100
self.p = self.palette()
self.p.setColor(QtGui.QPalette.Window,QtGui.QColor(255,255,255))
self.setPalette(self.p)
self.slider = QtGui.QSlider()
self.slider.setRange(0,100)
self.slider.setTickInterval(10)
self.slider.setOrientation(QtCore.Qt.Horizontal)
self.slider.setValue(100)
self.slider.valueChanged.connect(self.slotchange)
self.slider.sliderReleased.connect(self.slotpaint)
self.slotchange(self.slider.value())
self.button = QtGui.QPushButton()
self.button.setText("打开")
self.button.clicked.connect(self.slotopen)
self.mylayout = QtGui.QHBoxLayout()
self.mylayout.addStretch(1)
self.mylayout.addWidget(self.slider)
self.mylayout.addWidget(self.button)
self.setLayout(self.mylayout)
def slotopen(self):
self.filename = QtGui.QFileDialog.getOpenFileName(self,"打开",
"D:","Images(*.png *.jpg)")
if self.filename:
self.img = QtGui.QImage(self.filename[0])
self.dst = self.img
self.repaint()
self.resize(self.img.width(),self.img.height())
self.flag = True
else:
self.flag = False
def paintEvent(self, e):
painter = QtGui.QPainter(self)
painter.drawImage(0,0,self.dst)
def slotchange(self,value):
self.new = value
def slotpaint(self):
bkColor = self.palette().color(QtGui.QPalette.Window)
v = 0.01*self.new
self.img = QtGui.QImage(self.filename[0])
if self.flag is True:
self.dst = self.img
width = self.dst.width()
height = self.dst.height()
for i in range(0,height):
for j in range(0,width):
alpha = QtGui.qAlpha(self.dst.pixel(j,i))
if alpha is 0:
red = QtGui.qRed(bkColor.rgb())
green = QtGui.qGreen(bkColor.rgb())
blue = QtGui.qBlue(bkColor.rgb())
self.dst.setPixel(j,i,QtGui.qRgb(red,green,blue))
else:
red = (QtGui.qRed(bkColor.rgb()))*(1-v) + (QtGui.qRed(self.img.pixel(j,i))*v)
green = (QtGui.qGreen(bkColor.rgb()))*(1-v) + (QtGui.qGreen(self.img.pixel(j,i))*v)
blue = (QtGui.qBlue((bkColor.rgb())))*(1-v) + (QtGui.qBlue(self.img.pixel(j,i))*v)
self.dst.setPixel(j,i,QtGui.qRgb(red,green,blue))
self.repaint()
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
mainwindow = PicTrans()
mainwindow.show()
sys.exit(app.exec_())
效果图1,透明度为100%的时候:
透明度为50%的时候: