Skip to content
Related Articles

Related Articles

PyQt5 – How to create circular image from any image ?

View Discussion
Improve Article
Save Article
  • Last Updated : 26 Mar, 2020

In this article, we will see how to display only circular/round image from any image with any width and height i.e

In order to do so we have to do the following steps :

1. Load the image
2. Crop image to make it square
3. Mask it and make circle from it using Painter
4. Convert it back to pixmap image

Code :

Below is the original image :

# importing libraries
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import *
# function to alter image
def mask_image(imgdata, imgtype ='png', size = 64):
    # Load image
    image = QImage.fromData(imgdata, imgtype)
    # convert image to 32-bit ARGB (adds an alpha
    # channel ie transparency factor):
    # Crop image to a square:
    imgsize = min(image.width(), image.height())
    rect = QRect(
        (image.width() - imgsize) / 2,
        (image.height() - imgsize) / 2,
    image = image.copy(rect)
    # Create the output image with the same dimensions 
    # and an alpha channel and make it completely transparent:
    out_img = QImage(imgsize, imgsize, QImage.Format_ARGB32)
    # Create a texture brush and paint a circle 
    # with the original image onto the output image:
    brush = QBrush(image)
    # Paint the output image
    painter = QPainter(out_img)
    # Don't draw an outline
    # drawing circle
    painter.drawEllipse(0, 0, imgsize, imgsize)
    # closing painter event
    # Convert the image to a pixmap and rescale it. 
    pr = QWindow().devicePixelRatio()
    pm = QPixmap.fromImage(out_img)
    size *= pr
    pm = pm.scaled(size, size, Qt.KeepAspectRatio, 
    # return back the pixmap data
    return pm
class Window(QWidget):
    """Simple window that shows our masked image and text label."""
    def __init__(self):
        # setting up the geometry
        self.setGeometry(100, 100, 600, 400)
        # image path
        imgpath = "image.png"
        # loading image
        imgdata = open(imgpath, 'rb').read()
        # calling the function
        pixmap = mask_image(imgdata)
        # creating label
        self.ilabel = QLabel(self)
        # putting image on label
        # moving the label
        self.ilabel.move(240, 180)
        # another label to put text
        self.tlabel = QLabel('This is circular image', self)
        self.tlabel.move(200, 250)
# main function
if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication
    # app created
    app = QApplication(sys.argv)
    w = Window()
    # begin the app

Output :

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!