我正在使用 PyQt6 创建一个简单的应用程序。我希望我的代码自动将所选图像裁剪为圆形。我怎样才能做到这一点?请帮忙
user14965326
问问题
148 次
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 回答