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

Другие вопросы по тегам