pyside 蒙版的基本使用-pyqt 掩码 掩模 圆形头像 mask 图像

图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 画的一个空窗口,图片素材大家可自取:
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一款跨平台的图形用户界面开发框架,提供了丰富的GUI控件和功能以及跨平台的能力。PyQtPySide是在Qt基础上开发的Python绑定库,使得我们可以使用Python语言来编写Qt应用程序。 PyQtPySide提供了和Qt类似的功能和API,使得我们可以方便地在Python使用Qt的各种特性,如窗口管理、布局管理器、事件处理和信号槽机制等。它们支持Qt的所有模块,因此可以利用Qt的强大功能开发出高度可定制的应用程序。 Custom Widgets是指自定义的用户界面部件,可以根据需求自己进行开发或者对现有的控件进行定制。在PyQtPySide中,我们可以使用Qt的功能来创建自定义的控件,通过继承已有的控件类来添加新的功能或者修改控件的外观和行为。这样可以满足特定需求并增加应用程序的交互性和美观性。 开发自定义的控件需要理解Qt的事件和绘图机制,掌握Qt提供的绘图功能和控件定制的技术。我们可以使用Qt的绘图API来绘制自定义的界面元素,并且可以通过事件和信号槽来实现控件的交互性。在PyQtPySide中,可以利用Python的特性和语法来更加方便地进行控件的开发和定制。 总之,QtPyQtPySide的结合可以帮助我们快速开发跨平台的应用程序,并且可以通过自定义控件来满足特定需求。这些工具和技术的使用可以大大提高应用程序的开发效率和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值