图1:原图,图2:掩模图,图3:效果图
由下图可知,掩模图相当于只获取了黑色的部分,白色部分则丢弃(变为透明)
代码如下:
import sys
from PySide6.QtWidgets import (QApplication,QLabel, QMainWindow,QWidget)
from PySide6.QtCore import (Qt)
from PySide6.QtGui import QPalette, QPixmap, QPainter,QBitmap,QImage
from PySide6.QtUiTools import QUiLoader
class MainWindow(QMainWindow):
def __init__(self):
self.screen_size = QApplication.primaryScreen().size()
loader = QUiLoader()
self.ui = loader.load(r"ui\test.ui")
# self.ui.setStyleSheet(my_style.main_window)
# 设置窗口相对于屏幕的位置和大小 (x, y, width, height)
self.ui.setGeometry(self.screen_size.width() * 0.4,
self.screen_size.height() * 0.05,
self.screen_size.width() * 0.5,
self.screen_size.height() * 0.8
)
self.ui.setWindowTitle("MainWindow")
self.mask_test()
def mask_test(self):
x = 10
y = 220
w = h = 300
# 显示原图
load_img = QPixmap(r"C:\Users\mrh\Downloads\鸡你太美.jpg")
# 等比例缩放图片,最大宽度为 w
# 注意:掩模图和原图的尺寸必须完全一致,
img = load_img.scaledToWidth(w, Qt.FastTransformation)
lable1 = QLabel(self.ui.centralwidget)
lable1.move(x,y)
lable1.setPixmap(img)
x = x+w+20
# 显示蒙版图
# 注意:蒙版图的尺寸必须是和原图一样,相当于蒙版和原图是在一个图纸中
bm = QBitmap(QPixmap(r"C:\Users\mrh\Downloads\mask.jpg")).scaledToWidth(w, Qt.FastTransformation)
lable2 = QLabel(self.ui.centralwidget)
lable2.move(x,y)
lable2.setPixmap(bm)
x = x+w+20
# 显示蒙版效果
load_img = QPixmap(r"C:\Users\mrh\Downloads\鸡你太美.jpg").scaledToWidth(w, Qt.FastTransformation)
# 只有转化为 QBitmap 格式才能设置掩码
mask = QBitmap(bm)
load_img.setMask(mask)
lable3 = QLabel(self.ui.centralwidget)
lable3.move(x,y)
lable3.setPixmap(load_img)
x = x+w+20
def my_test():
app = QApplication(sys.argv)
w = MainWindow()
w.ui.show()
app.exec()
if __name__ == '__main__':
my_test()
唯一需要注意的是,原图像和掩模图的尺寸必须一致,否则没有效果。
test.ui文件是用 QT designer 画的一个空窗口,图片素材大家可自取: