Обрезать изображение до формы круга для PyQt [дубликат]
Я создаю простое приложение с PyQt6. Я хочу, чтобы мой код автоматически обрезал выбранное изображение в форме круга. Как я могу это сделать? Пожалуйста помоги
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()
является обязательным , иначе вместо этого на неокрашенных частях изображения, вероятно, будут случайные пиксели (обычно это «остатки ОЗУ»).