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