在 PySide 中减小图像的大小

Posted

技术标签:

【中文标题】在 PySide 中减小图像的大小【英文标题】:Reducing size of an image in PySide 【发布时间】:2013-08-15 11:09:05 【问题描述】:

我的要求是缩小图像的大小并显示在方形框(50 x 50)中。如果图像的大小小于方形框的大小,则图像应按原样显示。作为最初的尝试,我尝试使用以下代码,目的是减少所有图像的大小:

picSize = QtCore.QSize(lbl.width() / 2 , lbl.height() / 2)

但以下代码即使在使用后也不会减小图像的大小:

picSize = QtCore.QSize(lbl.width() / 4 , lbl.height() / 4)

请帮帮我。

import os
import sys

from PySide import QtGui, QtCore

class SecondExample(QtGui.QWidget):

    def __init__(self):
        super(SecondExample, self).__init__()
        self.initUI()

    def initUI(self):
        self.imgFolder = os.getcwd()


        self.widgetLayout = QtGui.QVBoxLayout(self)
        self.scrollarea = QtGui.QScrollArea()
        self.scrollarea.setWidgetResizable(True)
        self.widgetLayout.addWidget(self.scrollarea)
        self.widget = QtGui.QWidget()
        self.layout = QtGui.QVBoxLayout(self.widget)    
        self.scrollarea.setWidget(self.widget)

        self.layout.setAlignment(QtCore.Qt.AlignHCenter)

        for img in os.listdir(self.imgFolder):
            imgPath = os.path.join(self.imgFolder, img)
            actualImage = QtGui.QImage(imgPath)
            pixmap = QtGui.QPixmap(imgPath)

            lbl = QtGui.QLabel(self)
            lbl.setPixmap(pixmap)

            lbl.setScaledContents(True)

            picSize = QtCore.QSize(lbl.width() / 2 , lbl.height() / 2)
            lbl.resize(picSize)

            self.layout.addWidget(lbl)

        self.setGeometry(100, 100, 900, 700)
        self.setWindowTitle('Viewer')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = SecondExample()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【问题讨论】:

【参考方案1】:

以下代码将满足您的要求:

            imgPath = os.path.join(self.imgFolder, img)
            actualImage = QtGui.QImage(imgPath)
            pixmap = QtGui.QPixmap(imgPath)
            pixmap = pixmap.scaled(500, 500, QtCore.Qt.KeepAspectRatio) 
            lbl = QtGui.QLabel(self)
            lbl.setPixmap(pixmap)

            lbl.setScaledContents(True)

【讨论】:

“actualImage = QtGui.QImage(imgPath)”有什么作用?【参考方案2】:

您可以使用scaledToWidth 或 scaledToHeightmethod on theQImage` 类。

img= QtGui.QImage(imgPath)
pixmap = QtGui.QPixmap(img.scaledToWidth(50))
lbl = QtGui.QLabel(self)
lbl.setPixmap(pixmap)

【讨论】:

【参考方案3】:

您必须使用QPixmap::scaled 来扩展QPixmap

pixmap.scaled(picSize)

您可能想查看AspectRatio。

【讨论】:

以上是关于在 PySide 中减小图像的大小的主要内容,如果未能解决你的问题,请参考以下文章

在android中减小从相机捕获的图像的大小

如何在本机反应中减小图像文件大小?

如何在php中减小图像大小?

磁盘上的图像文件大小(KB)随着Java中动态图像大小的调整(减小大小)而增加

在 android 中减小图像大小而不损失其质量

python 在Python中减小图像的文件大小