1. 程式人生 > 其它 >Qt實現圖片圓角

Qt實現圖片圓角

技術標籤:QtPython

    # 壓縮圖片為指定寬高
    def scaled_pixmap(self, src, width, height):
        h = width if height == 0 else height
        return src.scaled(width, h, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)

    def generatePixmap(self, src, width, height, radius):
        # 無效圖片不處理
        if src is None:
            return src

        # 壓縮圖片
        pixmap = self.scaled_pixmap(src, width, height)

        dest = QPixmap(width, height)
        dest.fill(Qt.transparent)
        painter = QPainter(dest)
        # 抗鋸齒 + 平滑邊緣處理
        painter.setRenderHints(QPainter.Antialiasing, True)
        painter.setRenderHints(QPainter.SmoothPixmapTransform, True)
        # 裁剪為圓角
        path = QPainterPath()
        # path.addEllipse(0, 0, width, height)
        rect = QRectF(0, 0, width, height)
        path.addRoundedRect(rect, radius, radius)
        painter.setClipPath(path)
        painter.drawPixmap(0, 0, width, height, pixmap)

        return dest

    def set_in_thumb(self):
        w = self.img_thumb.width()
        h = self.img_thumb.height()
        if os.path.exists(self.data_obj.thumb_path):
            img = self.generatePixmap(QPixmap(self.data_obj.thumb_path), w, h, 4)
            self.img_thumb.setPixmap(img)

連結