Neste artigo, veremos como exibir apenas imagens quadradas recortadas de qualquer imagem retangular com qualquer largura e altura, ou seja,

Para fazer isso, temos que seguir os seguintes passos:

1. Carregue a imagem
2. Corte a imagem para torná-la quadrada
3. Mascare-a e faça um quadrado perfeito usando o Painter
4. Converta-a de volta para imagem pixmap

 
Código -



Para esta imagem original abaixo está o código:

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import *
def mask_image(imgdata, imgtype ='png', size = 64): 
  
    
    image = QImage.fromData(imgdata, imgtype) 
  
    
    
    image.convertToFormat(QImage.Format_ARGB32) 
  
    
    imgsize = min(image.width(), image.height()) 
    rect = QRect( 
        (image.width() - imgsize) / 2, 
        (image.height() - imgsize) / 2, 
        imgsize, 
        imgsize, 
    ) 
    image = image.copy(rect) 
  
    
    
    
    out_img = QImage(imgsize, imgsize, QImage.Format_ARGB32) 
    out_img.fill(Qt.transparent) 
  
    
    
    
    brush = QBrush(image) 
  
    
    painter = QPainter(out_img) 
    painter.setBrush(brush) 
  
    
    painter.setPen(Qt.NoPen) 
  
    
    painter.drawRect(0, 0, imgsize, imgsize) 
  
    
    painter.end() 
  
    
    pr = QWindow().devicePixelRatio() 
    pm = QPixmap.fromImage(out_img) 
    pm.setDevicePixelRatio(pr) 
    size *= pr 
    pm = pm.scaled(size, size, Qt.KeepAspectRatio,  
                               Qt.SmoothTransformation) 
  
    
    return pm 
  
  
class Window(QWidget): 
  
    
    def __init__(self): 
        super().__init__() 
        self.setGeometry(100, 100, 600, 400) 
        imgpath = "image.png"
        imgdata = open(imgpath, 'rb').read() 
        pixmap = mask_image(imgdata) 
        self.ilabel = QLabel(self) 
        self.ilabel.setPixmap(pixmap) 
        self.ilabel.move(240, 180) 
        self.tlabel = QLabel('This is croped image', self) 
        self.tlabel.move(200, 250) 
  
  
  
if __name__ == '__main__': 
    import sys 
    from PyQt5.QtWidgets import QApplication 
  
    
    app = QApplication(sys.argv) 
    w = Window() 
    w.show() 
  
    
    sys.exit(app.exec_()) 

Resultado :