当前位置: 首页 > news >正文

PySide6 GUI 学习笔记——常用类及控件使用方法(常用图像类)

文章目录

  • PySide6 图像类及应用举例
    • PySide6 图像类继承关系图
    • QImage 常用方法
    • QPixmap 常用方法
    • QPixmap 支持的文件格式
    • QPicture 常用方法
    • QBitmap 常用方法

PySide6 图像类及应用举例

PySide6 提供了 QImageQPixmapQPictureQBitmap 四个类,用于处理图像。

QPixmap 适合将图像显示在电脑屏幕上,可以使用QPixmap在程序中打开png、jpeg等图片。QBitmapQPixmap的子类,用于处理位图,它的色深限定为1,颜色只有两种:黑色和白色,用于制作光标QCursor或画刷QBrush等。QImage专门读取像素文件,其存储独立于硬件,是一种QPaintDevice设备,可直接在QImage上用QPainter进行图像绘制,且可以在另一个线程中对其进行绘制,而不需要在GUI线程中处理,从而提高GUI响应速度。对于小图片,可以直接使用QPixmap加载,而对于大图片,QPixmap加载会消耗很大的内存,因此QImage更适合这种场景。QImage可以转换成QPixmapQPicture是一个可以记录和重现QPainter命令的绘图设备,它可以保存QPainter绘制的图形,QPictureQPainter的命令序列化到一个IO设备上,保存为一个平台独立的文件格式。QPainter与平台无关,可以用在多种设备上,比如svg、pdf、ps、打印机或屏幕等。

它们的继承关系如下:

PySide6 图像类继承关系图

QPaintDevice
QImage
QPixmap
QPicture
QBitmap

QImage 常用方法

方法名说明
load(filename)从文件加载图像
save(filename)保存图像到文件
width()获取图像宽度
height()获取图像高度
pixel(x, y)获取指定像素的颜色
setPixel(x, y, c)设置指定像素的颜色
scaled(w, h)返回缩放后的图像

示例代码:

from PySide6.QtGui import QImage
img = QImage("test.png")
print(img.width(), img.height())
img.save("copy.png")

QPixmap 常用方法

方法名说明
load(filename)从文件加载图像
save(filename)保存图像到文件
width()获取图像宽度
height()获取图像高度
scaled(w, h)返回缩放后的 QPixmap
toImage()转换为 QImage

QPixmap 支持的文件格式

格式描述Qt 支持
BMPWindows 位图读/写
GIF图形交换格式(可选)读取
JPG联合图像专家组读/写
JPEG联合图像专家组读/写
PNG便携式网络图形读/写
PBM便携式位图读取
PGM便携式灰度图读取
PPM便携式像素图读/写
XBMX11 位图读/写
XPMX11 像素图读/写

示例代码:

import sys
from PySide6.QtWidgets import QApplication,QWidget,QLabel,QVBoxLayout,\QPushButton,QFileDialog
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Qtclass MyPixmap(QWidget):def __init__(self,parent=None):super().__init__(parent)self.setGeometry(200,200,800,500)  #设置窗口尺寸self.setupUi()  #调用函数建立界面def setupUi(self):   #创建界面self.label = QLabel("单击按钮打开图像文件!")  #创建标签self.label.setAlignment(Qt.AlignCenter)   #中心对齐font = self.label.font()   #获取字体font.setPointSize(10)  #设置字体大小self.label.setFont(font)  #给标签设置字体self.open_button = QPushButton("打开图像文件(&O)")  #创建按钮self.open_button.setFont(font)  #给按钮设置字体self.vertical_layout = QVBoxLayout(self)  #在窗口上创建竖直布局self.vertical_layout.addWidget(self.label)  #在布局中添加标签self.vertical_layout.addWidget(self.open_button)  #在布局中添加按钮self.open_button.clicked.connect(self.open_button_clciked)  #按钮信号与槽的连接def open_button_clciked(self):fileName,filter = QFileDialog.getOpenFileName(filter=  #打开对话框获取文件名'图像文件(*.png *.bmp *.jpg *.jpeg);;所有文件(*.*)')pixmap = QPixmap(fileName)  #创建QPixmap图像self.label.setPixmap(pixmap)  #在标签中显示图像
if __name__ == '__main__':app = QApplication(sys.argv)window = MyPixmap()window.show()sys.exit(app.exec())

QPixmap示例


QPicture 常用方法

方法名说明
load(filename)从文件加载绘图指令
save(filename)保存绘图指令到文件
play(painter)在 QPainter 上重现绘图
isNull()判断是否为空

示例代码:

from PySide6.QtGui import QPicture, QPainter
pic = QPicture()
painter = QPainter(pic)
painter.drawLine(0, 0, 100, 100)
painter.end()
pic.save("drawing.pic")

QBitmap 常用方法

方法名说明
fromImage(image)从 QImage 创建 QBitmap
clear()清空位图
isNull()判断是否为空
scaled(w, h)返回缩放后的 QBitmap

示例代码:

from PySide6.QtGui import QBitmap, QImage
img = QImage("mask.png")
bitmap = QBitmap.fromImage(img)
bitmap.save("bitmap.bmp")
import sys
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtGui import QPainter,QPixmap,QBitmap,QImage,QColor
from PySide6.QtCore import QRectclass ShowPictures(QWidget):def __init__(self,parent=None):super().__init__(parent)self.setWindowTitle("绘图")self.pix = QPixmap()self.bit = QBitmap()self.image = QImage()self.pix.load("pic.png")self.bit.load("pic.png")self.image.load("pic.png")#下面创建两个image图像,分别存储灰度图和明亮图self.image_1=QImage(self.image.width(),self.image.height(),QImage.Format_ARGB32)self.image_2=QImage(self.image.width(),self.image.height(),QImage.Format_ARGB32)self.gray()  #调用灰度处理函数self.bright()  #调用明亮处理函数def paintEvent(self, event):w = int(self.width()/2)   #窗口的一半宽度h = int(self.height()/2)  #窗口的一半高度rect1 = QRect(0,0,w-2,h-2)  #矩形区域1rect2 = QRect(w,0,w-2,h-2)  #矩形区域2rect3 = QRect(0,h, w-2, h-2)  #矩形区域3rect4 = QRect(w,h,w-2,h-2)  #矩形区域4painter = QPainter(self)painter.drawPixmap(rect1,self.pix)  #在矩形区域1绘图图像painter.drawPixmap(rect2,self.bit)  #在矩形区域2绘图图像painter.drawImage(rect3,self.image_1)  #在矩形区域3绘图图像painter.drawImage(rect4,self.image_2)  #在矩形区域4绘图图像def gray(self):  #对图像进行灰度处理color = QColor()for i in range(1,self.image_1.width()+1):for j in range(1,self.image_1.height()+1):alpha = self.image.pixelColor(i, j).alpha()  #获取像素点alpha值r = self.image.pixelColor(i, j).red()  #获取像素点红色值g = self.image.pixelColor(i, j).green() #获取像素点绿色值b = self.image.pixelColor(i, j).blue() #获取像素点蓝色值average = int((r+g+b)/3)  #取平均值color.setRgb(average,average,average,alpha)  #设置颜色self.image_1.setPixelColor(i,j,color)  #设置像素点的颜色self.image_1.save("gray.jpg")  #保存文件def bright(self): #对图像进行明亮处理color = QColor()delta = 50  #RGB增加值for i in range(1,self.image_1.width()+1):for j in range(1,self.image_1.height()+1):alpha = self.image.pixelColor(i,j).alpha()r = self.image.pixelColor(i, j).red()+ deltag = self.image.pixelColor(i, j).green()+ deltab = self.image.pixelColor(i, j).blue()+ deltaif r > 255: r = 255if g > 255: g = 255if b > 255: b = 255color.setRgb(r, g, b, alpha)self.image_2.setPixelColor(i,j,color)self.image_2.save("bright.jpg")
if __name__ == '__main__':app=QApplication(sys.argv)window = ShowPictures()window.show()sys.exit(app.exec())

QImage示例

http://www.xdnf.cn/news/637597.html

相关文章:

  • 运维Linux之Ansible详解学习(更新中)
  • 【linux篇】系统世界跳跃的音符:指令
  • SheetMetal_Unfold方法 FreeCAD_SheetMetal deepwiki 源码笔记
  • 【时时三省】Python 语言----牛客网刷题笔记
  • 【电路笔记】-音频变压器(Audio Transformer)
  • RAG系统构建之嵌入模型性能优化完整指南
  • 永磁同步电机控制算法--IP调节器
  • 前端面试热门知识点总结
  • MongoDB分布式架构详解:复制与分片的高可用与扩展之道
  • 【Vue3】(二)vue3语法详解:自定义泛型、生命周期、Hooks、路由
  • C51单片机学习笔记——矩阵按键
  • 【硬件测试】基于FPGA的BPSK+卷积编码Viterbi译码系统开发,包含帧同步,信道,误码统计,可设置SNR
  • 平流层通信系统的深度论述:其技术成熟将推动通信范式从“地面-卫星”二元架构向“地-空-天”三维融合跃迁
  • Linux初始-历史(1)
  • Java并发编程:全面解析锁策略、CAS与synchronized优化机制
  • 关于 Web 安全:5. 认证绕过与权限控制分析
  • L1-110 这不是字符串题 - java
  • Magic Resume:开源免费的AI简历制作应用(使用指南、场景分析)
  • 网络基础学习
  • TTL和死信交换机实现延迟队列
  • 测试工程师如何通俗理解和入门RAG:从“查资料”到“写答案”的智能升级
  • 双电机正交系统中惯性力偶矩拍频现象的机理与优化策略
  • mysql知识点1--了解数据库
  • 第十六篇:真正的学习,系统分析师考后总结
  • 理解 Redis 事务-21(使用事务实现原子操)
  • GAN-STD:融合检测器与生成器的方法
  • Prometheus 架构及其特性
  • ModbusRTU转profibusDP网关与RAC400通讯报文解析
  • 历年贵州大学保研上机真题
  • web各类编码笔记