# 压缩图片为指定宽高
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)