国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - PyQt5 顯示超清高分辨率圖片的方法

PyQt5 顯示超清高分辨率圖片的方法

2021-10-08 00:26muyuuuu Python

這篇文章主要介紹了PyQt5 顯示超清高分辨率圖片的方法,幫助大家更好的理解和阿學習使用pyqt5,感興趣的朋友可以了解下

昨天寫程序遇到一個問題,pyqt5 加載常規的圖片完全可以顯示。可當加載超清的高分辨率圖片時,只能顯示一個小角落。可我就想把一張 3840x2160 的圖片加載到一個 800x600 的標簽里該怎么辦呢?如何自適應放縮尺寸,國內社區眾所周知大多是抄襲,沒什么解決方案;外網站搜了一下也沒找到現成的解決方案,我知道又到了我開坑的時候了。

常規加載

先來看一下,如何借助 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())

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

    第一步,QFileDialog 選擇文件路徑 第二步,將文件路徑傳入 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. 第三步,將 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

代碼解析:

    創建 QImageReader 對象,方便對圖片進行更多的操作 自適應伸縮,將寬度限定為 800,自適應計算高度應該是多少,而后設置要縮放的大小 將設置好的圖像讀入為 QImage 類型,而后程序里將其轉為 QPixmap 類型 正常方法設置即可,超清圖像完美被加載

PyQt5 顯示超清高分辨率圖片的方法

以上就是PyQt5 顯示超清高分辨率圖片的方法的詳細內容,更多關于PyQt5 顯示超清高分辨率圖片的資料請關注其它相關文章!

原文鏈接:https://muyuuuu.github.io/2021/04/10/pyqt5-load-huge-image/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲高清视频在线 | 黄色av免费 | 99热最新| 日韩电影免费在线观看中文字幕 | 久久夜夜| 草久网| 欧美区国产| 国产精品视屏 | 最新国产一区二区 | 欧美视频一区二区 | av网站推荐 | 91高清在线 | 国产情侣一区二区三区 | 少妇精品久久久久久久久久 | 俺来也俺也啪www色 性色视频在线 | 欧美一区二区网站 | 欧洲精品久久久久毛片完整版 | 狠狠艹 | 黄色短视频在线观看 | 91精品国产高清一区二区三区 | 成人av电影在线观看 | 久草中文在线 | 亚洲国产综合在线观看 | 日韩欧美手机在线 | 国产精品久久久久久久9999 | 国产伦精品一区二区三区高清 | 最新国产精品 | 99热精品在线 | 中文字幕日韩一区 | 亚洲精品一区二区三区不 | 久久久久久久久久久高潮 | 国内激情自拍 | 日韩一区二区三区在线观看 | 久久高清 | 狠狠的日 | 欧美一级一区 | 亚洲精品第一区在线观看 | 日本不卡一区二区三区 | 欧美福利在线观看 | 羞羞视频在线看 | av在线天堂网 |