0

我正在使用 PyQt6 创建一个简单的应用程序。我希望我的代码自动将所选图像裁剪为圆形。我怎样才能做到这一点?请帮忙

4

1 回答 1

1

使用像枕头或 opencv 这样的外部库使事情变得容易,因为它们通常具有已经提供类似处理的函数,但是没有必要为像这样的简单操作添加依赖项,除非性能成为问题。

在 Qt 上它非常简单:基于最小范围创建一个新的 QPixmap(假设圆将是给定矩形中可能最大的),创建一个 QPainterPath 与一个将用于剪切的圆,最后绘制源里面的内容。

def circleImage(imagePath):
    source = QtGui.QPixmap(imagePath)
    size = min(source.width(), source.height())

    target = QtGui.QPixmap(size, size)
    target.fill(QtCore.Qt.transparent)

    qp = QtGui.QPainter(target)
    qp.setRenderHints(qp.Antialiasing)
    path = QtGui.QPainterPath()
    path.addEllipse(0, 0, size, size)
    qp.setClipPath(path)

    sourceRect = QtCore.QRect(0, 0, size, size)
    sourceRect.moveCenter(source.rect().center())
    qp.drawPixmap(target.rect(), source, sourceRect)
    qp.end()

    return target

这显然会在圆圈周围创建一个具有透明背景的图像,您可以使用任何全局颜色或您自己的 QColor。
请注意,无论颜色如何,fill()都是强制性的,否则图像的未绘制部分可能会出现随机像素(通常是一些“RAM残留物”)。

于 2021-03-14T15:44:56.233 回答