我正在对back_picture作为图像的小部件应用模糊效果。
现在看起来像这样:
屏幕截图显示图像边缘模糊,这就是出现暗框的原因。我需要以某种方式摆脱这个边界,换句话说,使图像的边缘清晰。为了更清楚一点,我画了一张图как сейчас/как надо。她在这里:
当然,您可以通过减少模糊区域来消除边缘羽化。但这不是最好的方法,因为如果你大大减少模糊区域,会注意到不是整个图像都模糊,这根本不适合我:
请问你能告诉我在模糊图像时如何保持图像边缘清晰吗?
from PyQt5 import QtCore, QtWidgets, QtGui
class BackPicture(QtWidgets.QLabel):
def __init__(self, picture, x, *args, **kwargs):
super(BackPicture, self).__init__(*args, **kwargs)
self.setFixedSize(x, x)
self.x = x
self.setPicture(picture)
def setPicture(self, picture):
self.setPixmap(QtGui.QPixmap(picture).scaled(self.x, self.x, QtCore.Qt.KeepAspectRatio))
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
self.index = 1
btn = QtWidgets.QPushButton('Remake', clicked = self.remake)
self.container = QtWidgets.QWidget()
self.container.setStyleSheet('background: #2A303D;')
self.container.setMinimumHeight(300)
self.container.setFixedWidth(300)
main_box = QtWidgets.QHBoxLayout(self)
main_box.addWidget(btn)
main_box.addWidget(self.container)
box = QtWidgets.QVBoxLayout(self.container)
box.setContentsMargins(0, 0, 0, 0)
self.back_picture = BackPicture('picture3.jpg', 300, self.container)
self.back_picture.move(0, 0)
blur_effect = QtWidgets.QGraphicsBlurEffect(blurRadius = 3)
self.back_picture.setGraphicsEffect(blur_effect)
label1 = QtWidgets.QLabel('Text number 1')
label1.setStyleSheet(qss)
box.addWidget(label1, alignment = QtCore.Qt.AlignCenter)
def remake(self):
if self.index == 1:
self.back_picture.setPicture('picture2.png')
self.index = 2
else:
self.back_picture.setPicture('picture1.png')
self.index = 1
qss = '''QLabel {
color: red;
font: bold 16px;
background: transparent;
}'''
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
UPD: 这是一张图片,音乐专辑林肯公园 - 狩猎派对的封面




我不确定我是否正确理解您,但请尝试: