91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用PyQt5怎么顯示超清高分辨率圖片

發布時間:2021-04-12 15:45:42 來源:億速云 閱讀:349 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關使用PyQt5怎么顯示超清高分辨率圖片,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

常規加載

先來看一下,如何借助 QLabel 和 QFileDialog 加載低分辨率的圖片,這時候時能正常顯示的。

import sys
from PyQt5.QtWidgets import (QMainWindow, QWidget, QHBoxLayout, QApplication, 
                             QPushButton, QLabel, QFileDialog, QVBoxLayout, 
                             QLineEdit)
from PyQt5.QtGui import QPixmap


class mainwindow(QMainWindow):
    def __init__(self):
        super(mainwindow, self).__init__()

        layout = QVBoxLayout()
        w = QWidget()
        w.setLayout(layout)
        self.setCentralWidget(w)

        self.image_label = QLabel()
        self.image_label.setFixedSize(800, 500)
        layout.addWidget(self.image_label)

        tmp_layout = QHBoxLayout()
        btn = QPushButton("選擇圖片路徑")
        tmp_layout.addWidget(btn)
        btn.clicked.connect(self.load_image)

        self.result = QLineEdit()
        self.result.setPlaceholderText("車牌展示")
        self.result.setReadOnly(True)
        tmp_layout.addWidget(self.result)
        layout.addLayout(tmp_layout)

    def load_image(self):
        fname, _ = QFileDialog.getOpenFileName(self, 'Open File', 
                    'C://', "Image files (*.jpg *.png)")
        if fname is not None:
            pixmap = QPixmap(fname)
            self.image_label.setPixmap(pixmap)

if __name__ == '__main__':
    app = QApplication([])
    m = mainwindow()
    m.show()
    sys.exit(app.exec())

上述代碼中,點擊『選擇圖片路徑』按鈕就會調用文件對話框,選擇圖片后就會打開。步驟為:

  1. 第一步,QFileDialog 選擇文件路徑

  2. 第二步,將文件路徑傳入 QPixmap 類,通過重載構造一個對象,文檔原話:Constructs a pixmap from the file with the given fileName. If the file does not exist or is of an unknown format, the pixmap becomes a null pixmap.

  3. 第三步,將 QPixmap 對象傳給標簽的 setPixmap 方法,就完成了圖片的顯示。

對于低分辨率圖片,加載是沒問題的:

使用PyQt5怎么顯示超清高分辨率圖片

但高分辨率的圖片,只能顯示一個角落,也就是藍色框那一部分:

使用PyQt5怎么顯示超清高分辨率圖片

如何解決呢?既然國內外都沒有現成的解決方案,只能掏出萬能的官方文檔了。

QImageReader 類

需要注意的是官方文檔的語言是 C++,還好我會C++。打開文檔,映入眼簾的就四句話:

  • QImageReader reader("large.jpeg"); 讀取圖片

  • reader.size(); 圖片尺寸

  • reader.setClipRect(myRect); 圖片裁剪

  • reader.setScaledSize(mySize); 設置圖片尺寸,文檔原話:Another common function is to show a smaller version of the image. Loading a very large image and then scaling it down to the approriate size can be a very memory consuming operation. By calling the QImageReader::setScaledSize function, you can set the size that you want your resulting image to be.

剩下的任務就很簡單了,讀圖片,設置尺寸,顯示。

import sys, time
from PyQt5.QtWidgets import (QMainWindow, QWidget, QHBoxLayout, QApplication, 
                             QPushButton, QLabel, QFileDialog, QVBoxLayout, 
                             QLineEdit)
from PyQt5.QtGui import QPixmap, QFont
from PyQt5.Qt import QSize, QImageReader
import qdarkstyle


class mainwindow(QMainWindow):
    def __init__(self):
        super(mainwindow, self).__init__()

        layout = QVBoxLayout()
        w = QWidget()
        w.setLayout(layout)
        self.setCentralWidget(w)

        self.image_label = QLabel()
        self.image_label.setFixedSize(800, 500)
        layout.addWidget(self.image_label)

        tmp_layout = QHBoxLayout()
        btn = QPushButton("選擇圖片路徑")
        tmp_layout.addWidget(btn)
        btn.clicked.connect(self.load_image)

        self.result = QLineEdit()
        self.result.setPlaceholderText("車牌展示")
        self.result.setReadOnly(True)
        tmp_layout.addWidget(self.result)
        layout.addLayout(tmp_layout)

        self.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())

    def load_image(self):
        fname, _ = QFileDialog.getOpenFileName(self, 'Open File', 
                   'C://', "Image files (*.jpg *.png)")
        if fname is not None:
            # 還需要對圖片進行重新調整大小
            img = QImageReader(fname)
            scale = 800 / img.size().width()
            height = int(img.size().height() * scale)
            img.setScaledSize(QSize(800, height))
            img = img.read()
            # 打開設置好的圖片
            pixmap = QPixmap(img)
            self.image_label.setPixmap(pixmap)
            self.result.setText("車牌號放到這里")


if __name__ == '__main__':
    app = QApplication([])
    font = QFont()
    font.setFamily("SimHei")
    font.setPointSize(14)
    app.setFont(font)
    m = mainwindow()
    m.show()
    sys.exit(app.exec())

考慮到可能會加載超清圖像,為了方便對圖片進行控制,不要采用 QImage 或 QPixmap,而是使用 QImageReader

代碼解析:

  1. 創建 QImageReader 對象,方便對圖片進行更多的操作

  2. 自適應伸縮,將寬度限定為 800,自適應計算高度應該是多少,而后設置要縮放的大小

  3. 將設置好的圖像讀入為 QImage 類型,而后程序里將其轉為 QPixmap 類型

  4. 正常方法設置即可,超清圖像完美被加載

上述就是小編為大家分享的使用PyQt5怎么顯示超清高分辨率圖片了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正镶白旗| 修水县| 西峡县| 虹口区| 东阿县| 克山县| 和政县| 白水县| 钦州市| 胶南市| 清徐县| 舟曲县| 平乐县| 成安县| 咸丰县| 河北区| 浦县| 木里| 柳河县| 临澧县| 边坝县| 盐城市| 南陵县| 遵义市| 酉阳| 张家口市| 白沙| 浑源县| 克什克腾旗| 远安县| 台前县| 慈利县| 河南省| 伊金霍洛旗| 石狮市| 辽宁省| 尉犁县| 甘孜县| 建德市| 罗平县| 全椒县|