显示 Pillow 图片
这篇教学会介绍如何运用 PyQt6 的 QLabel 搭配 QPixmap,在 PyQt6 中显示 Pillow 函数库所打开的图片,如果可以显示 Pillow 打开的图片,就能进一步实现调整图片亮度对比的功能,实作出简单的图像调整软件啰。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
安装 Pillow
输入下列指令安装 Pillow,根据个人环境使用 pip 或 pip3,如果使用 Anaconda Jupyter,已经内建 Pillow 函数库。
pip install Pillow
显示 Pillow 图片
加载对应的函数库时,额外加载 PIL 的 ImageQt 模组,这个模组可以将 Pillow 所读取的图片文件,转换成可以在 QPixmap 中显示的格式,读取之后就能利用“使用 QLabel + QPixmap”方法显示图片。
from PyQt6 import QtWidgets
from PyQt6.QtGui import *
from PyQt6.QtCore import *
import sys
from PIL import Image, ImageQt
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowTitle("oxxo.studio")
MainWindow.resize(300, 300)
img = Image.open('mona.jpg') # 使用 Pillow 開啟圖片
qimg = ImageQt.toqimage(img) # 轉換成 QPixmap 格式
canvas = QPixmap(300,300).fromImage(qimg) # 建立 QPixmap 畫布,讀取圖片
label = QtWidgets.QLabel(MainWindow) # 建立 QLabel
label.setGeometry(0, 0, 300, 300) # 設定 QLabel 尺寸位置
label.setPixmap(canvas) # QLabel 放入畫布
MainWindow.show()
sys.exit(app.exec())
也可以改用 class 的写法:
from PyQt6 import QtWidgets
from PyQt6.QtGui import *
from PyQt6.QtCore import *
import sys
from PIL import Image, ImageQt
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 300)
self.setUpdatesEnabled(True)
self.ui()
def ui(self):
img = Image.open('mona.jpg')
qimg = ImageQt.toqimage(img)
self.canvas = QPixmap(300,300).fromImage(qimg)
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(0, 0, 300, 300)
self.label.setPixmap(self.canvas)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
显示 Pillow 调整后的图片
因为已经是透过 Pillow 加载图片,所以就能善用 Pillow 图像处理的功能,例如参考“调整图片亮度、对比、饱和度和锐利度”教学范例,额外加载 Pillow 的 ImageEnhance 模组,就能在 PyQt6 的视窗界面中,呈现使用 Pillow 调整后的图片。
from PyQt6 import QtWidgets
from PyQt6.QtGui import *
from PyQt6.QtCore import *
import sys
from PIL import Image, ImageQt, ImageEnhance
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowTitle("oxxo.studio")
MainWindow.resize(300, 300)
img = Image.open('mona.jpg')
img = ImageEnhance.Brightness(img).enhance(5) # 提高亮度
img = ImageEnhance.Contrast(img).enhance(5) # 提高對比
qimg = ImageQt.toqimage(img)
canvas = QPixmap(300,300).fromImage(qimg)
label = QtWidgets.QLabel(MainWindow)
label.setGeometry(0, 0, 300, 300)
label.setPixmap(canvas)
MainWindow.show()
sys.exit(app.exec())
也可以改用 class 的写法:
from PyQt6 import QtWidgets
from PyQt6.QtGui import *
from PyQt6.QtCore import *
import sys
from PIL import Image, ImageQt, ImageEnhance
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 300)
self.setUpdatesEnabled(True)
self.ui()
def ui(self):
img = Image.open('mona.jpg')
img = ImageEnhance.Brightness(img).enhance(5) # 提高亮度
img = ImageEnhance.Contrast(img).enhance(5) # 提高對比
qimg = ImageQt.toqimage(img)
self.canvas = QPixmap(300,300).fromImage(qimg)
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(0, 0, 300, 300)
self.label.setPixmap(self.canvas)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
延伸应用
微信扫码关注
抖音扫码关注