用户:
虚心的刺牙螺Qd_h查看:0 回复:1 评论:0 创建时间:2022-01-10T21:51:30
【作品展示】

【作品介绍】
大佬们,能帮我解决旋转功能的bug吗?求你了。
【作品源代码】
import sys
import os
from PySide2.QtWidgets import *
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import *
from PIL import Image, ImageFilter, ImageQt, ImageOps, ImageDraw, ImageSequence
from PySide2.QtGui import *
import matplotlib.pyplot as plt
from PySide2.QtGui import QIcon
from PySide2.QtCore import QSize
class Ui_process_img(object):
def setupUi(self, process_img):
if not process_img.objectName():
process_img.setObjectName(u"process_img")
process_img.resize(1429, 1041)
process_img.setMinimumSize(QSize(90, 0))
font = QFont()
font.setPointSize(10)
process_img.setFont(font)
self.centralwidget = QWidget(process_img)
self.centralwidget.setObjectName(u"centralwidget")
self.verticalLayout = QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.lb_title = QLabel(self.centralwidget)
self.lb_title.setObjectName(u"lb_title")
self.lb_title.setMinimumSize(QSize(0, 0))
self.lb_title.setMaximumSize(QSize(16777215, 80))
font1 = QFont()
font1.setFamily(u"\u534e\u6587\u65b0\u9b4f")
font1.setPointSize(35)
font1.setBold(False)
font1.setWeight(50)
self.lb_title.setFont(font1)
self.lb_title.setAlignment(Qt.AlignCenter)
self.verticalLayout.addWidget(self.lb_title)
self.label_3 = QLabel(self.centralwidget)
self.label_3.setObjectName(u"label_3")
self.label_3.setMaximumSize(QSize(16777215, 50))
font2 = QFont()
font2.setFamily(u"\u6768\u4efb\u4e1c\u7af9\u77f3\u4f53-Medium")
font2.setPointSize(18)
self.label_3.setFont(font2)
self.label_3.setLayoutDirection(Qt.LeftToRight)
self.label_3.setAlignment(
Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter)
self.verticalLayout.addWidget(self.label_3)
self.splitter = QSplitter(self.centralwidget)
self.splitter.setObjectName(u"splitter")
self.splitter.setOrientation(Qt.Horizontal)
self.pbtn_process = QPushButton(self.splitter)
self.pbtn_process.setObjectName(u"pbtn_process")
self.pbtn_process.setMinimumSize(QSize(150, 0))
self.pbtn_process.setMaximumSize(QSize(225, 16777215))
font3 = QFont()
font3.setFamily(u"\u534e\u6587\u4eff\u5b8b")
font3.setPointSize(20)
self.pbtn_process.setFont(font3)
self.splitter.addWidget(self.pbtn_process)
self.cb_fileter_list = QComboBox(self.splitter)
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.addItem("")
self.cb_fileter_list.setObjectName(u"cb_fileter_list")
self.cb_fileter_list.setMinimumSize(QSize(200, 0))
self.cb_fileter_list.setMaximumSize(QSize(1000000, 55))
font4 = QFont()
font4.setPointSize(20)
self.cb_fileter_list.setFont(font4)
self.splitter.addWidget(self.cb_fileter_list)
self.pbtn_file = QPushButton(self.splitter)
self.pbtn_file.setObjectName(u"pbtn_file")
self.pbtn_file.setMinimumSize(QSize(250, 0))
self.pbtn_file.setMaximumSize(QSize(250, 16777215))
self.pbtn_file.setFont(font4)
self.splitter.addWidget(self.pbtn_file)
self.pushButton_2 = QPushButton(self.splitter)
self.pushButton_2.setObjectName(u"pushButton_2")
self.pushButton_2.setMaximumSize(QSize(200, 16777215))
self.pushButton_2.setFont(font4)
self.splitter.addWidget(self.pushButton_2)
self.pushButton_3 = QPushButton(self.splitter)
self.pushButton_3.setObjectName(u"pushButton_3")
self.pushButton_3.setMaximumSize(QSize(喵))
self.pushButton_3.setFont(font4)
self.pushButton_3.setIconSize(QSize(50, 50))
self.splitter.addWidget(self.pushButton_3)
self.pushButton = QPushButton(self.splitter)
self.pushButton.setObjectName(u"pushButton")
self.pushButton.setMaximumSize(QSize(喵))
self.pushButton.setFont(font4)
self.splitter.addWidget(self.pushButton)
self.pushButton_4 = QPushButton(self.splitter)
self.pushButton_4.setObjectName(u"pushButton_4")
self.pushButton_4.setMaximumSize(QSize(50, 16777215))
icon = QIcon()
icon.addFile(u"bg.png", QSize(), QIcon.Normal, QIcon.Off)
self.pushButton_4.setIcon(icon)
self.pushButton_4.setIconSize(QSize(50, 50))
self.splitter.addWidget(self.pushButton_4)
self.verticalLayout.addWidget(self.splitter)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.lb_input_img = QLabel(self.centralwidget)
self.lb_input_img.setObjectName(u"lb_input_img")
font5 = QFont()
font5.setPointSize(50)
self.lb_input_img.setFont(font5)
self.lb_input_img.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.lb_input_img)
self.lb_output_img = QLabel(self.centralwidget)
self.lb_output_img.setObjectName(u"lb_output_img")
self.lb_output_img.setFont(font5)
self.lb_output_img.setAlignment(Qt.AlignCenter)
self.horizontalLayout.addWidget(self.lb_output_img)
self.verticalLayout.addLayout(self.horizontalLayout)
self.pbtn_save_img = QPushButton(self.centralwidget)
self.pbtn_save_img.setObjectName(u"pbtn_save_img")
self.pbtn_save_img.setMinimumSize(QSize(30, 0))
self.pbtn_save_img.setMaximumSize(QSize(16777215, 70))
self.pbtn_save_img.setFont(font4)
self.verticalLayout.addWidget(self.pbtn_save_img)
process_img.setCentralWidget(self.centralwidget)
self.retranslateUi(process_img)
QMetaObject.connectSlotsByName(process_img)
# setupUi
def retranslateUi(self, process_img):
process_img.setWindowTitle(QCoreApplication.translate(
"process_img", u"\u6ee4\u955c\u5904\u7406", None))
self.lb_title.setText(QCoreApplication.translate(
"process_img", u"\u56fe\u7247\u526a\u8f91\u8f6f\u4ef6", None))
self.label_3.setText(QCoreApplication.translate(
"process_img", u" 1.3.5\u7248\u672c \u66f4\u65b0\u65e5\u5fd7\uff1a\u65b0\u589e\u538b\u7f29\u529f\u80fd \u5e0c \u671b \u4f60 \u4eec \u559c \u6b22\uff01", None))
self.pbtn_process.setText(QCoreApplication.translate(
"process_img", u"\u9009\u62e9\u56fe\u7247", None))
self.cb_fileter_list.setItemText(0, QCoreApplication.translate(
"process_img", u"\u9009\u62e9\u6548\u679c", None))
self.cb_fileter_list.setItemText(
1, QCoreApplication.translate("process_img", u"\u6cb9\u753b", None))
self.cb_fileter_list.setItemText(
2, QCoreApplication.translate("process_img", u"\u7d20\u63cf", None))
self.cb_fileter_list.setItemText(3, QCoreApplication.translate(
"process_img", u"\u6a21\u7cca\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(4, QCoreApplication.translate(
"process_img", u"\u8f6e\u5ed3\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(5, QCoreApplication.translate(
"process_img", u"\u8fb9\u7f18\u589e\u5f3a\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(6, QCoreApplication.translate(
"process_img", u"\u6d6e\u96d5\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(7, QCoreApplication.translate(
"process_img", u"\u9510\u5316\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(8, QCoreApplication.translate(
"process_img", u"\u5e73\u6ed1\u6ee4\u955c", None))
self.cb_fileter_list.setItemText(9, QCoreApplication.translate(
"process_img", u"\u5b57\u7b26\u753b", None))
self.pbtn_file.setText(QCoreApplication.translate(
"process_img", u"\u5f00\u59cb\u5904\u7406", None))
self.pushButton_2.setText(QCoreApplication.translate(
"process_img", u"\u5237\u65b0", None))
self.pushButton_3.setText(QCoreApplication.translate(
"process_img", u"\u65cb\u8f6c", None))
self.pushButton.setText(QCoreApplication.translate(
"process_img", u"\u538b\u7f29\u56fe\u7247", None))
self.pushButton_4.setText("")
self.lb_input_img.setText(QCoreApplication.translate(
"process_img", u"\u5904\u7406\u524d", None))
self.lb_output_img.setText(QCoreApplication.translate(
"process_img", u"\u5904\u7406\u540e", None))
self.pbtn_save_img.setText(QCoreApplication.translate(
"process_img", u"\u4fdd\u5b58\u5904\u7406\u7ed3\u679c", None))
# retranslateUi
def to_sketch(img):
width, height = img.size
#转灰度图
img_gray = img.convert("L")
#反色
img_invert = ImageOps.invert(img_gray)
#高斯模糊
img_gaussian = img_invert.filter(ImageFilter.GaussianBlur(5))
#颜色减淡
for x in range(width):
for y in range(height):
pos = (x, y)
#获取灰度图的像数值
A = img_gray.getpixel(pos)
#获取高斯图的像数值
B = img_gaussian.getpixel(pos)
#颜色减淡公式
img_gray.putpixel(pos, min(int(A+A*B/(255-B)), 255))
return img_gray
def zifuchuan(img):
scale = 6
width, height = (int(img.width/scale), int(img.height/scale))
ASCII_HIGH = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
img_original = img.resize((width, height))
img = img.convert("L").resize((width, height))
img_new = Image.new("RGB", (width*scale, height*scale), "white")
draw = ImageDraw.Draw(img_new)
for y in range(height):
for x in range(width):
pos = (x, y)
gray = img.getpixel(pos) # 0-255
index = int(gray/256*70)
txt = ASCII_HIGH[index] + " "
color = img_original.getpixel(pos)
draw.text((x*scale, y*scale), txt, fill=color)
return img_new.convert("RGBA")
def you(img):
scale = 1
width, height = (int(img.width/scale), int(img.height/scale))
ASCII_HIGH = '''$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. '''
img_original = img.resize((width, height))
img = img.convert("L").resize((width, height))
img_new = Image.new("RGB", (width*scale, height*scale), "white")
draw = ImageDraw.Draw(img_new)
for y in range(height):
for x in range(width):
pos = (x, y)
gray = img.getpixel(pos) # 0-255
index = int(gray/256*70)
txt = ASCII_HIGH[index] + " "
color = img_original.getpixel(pos)
draw.text((x*scale, y*scale), txt, fill=color)
return img_new.convert("RGBA")
class ProcessImg(QMainWindow, Ui_process_img):
def __init__(self):
super().__init__()
self.setupUi(self)
#图片文件路径
self.file = None
self.img_temp = None
#滤镜
self.filters = {
"模糊滤镜": ImageFilter.BLUR,
"轮廓滤镜": ImageFilter.CONTOUR,
"边缘增强滤镜": ImageFilter.EDGE_ENHANCE,
"浮雕滤镜": ImageFilter.EMBOSS,
"锐化滤镜": ImageFilter.SHARPEN,
"平滑滤镜": ImageFilter.SMOOTH,
}
#绑定信号与槽函数
self.pbtn_process.clicked.connect(self.select_file)
self.pbtn_file.clicked.connect(self.process_img)
self.pbtn_save_img.clicked.connect(self.save_img)
self.pushButton_2.clicked.connect(self.shuaxin)
self.pushButton_3.clicked.connect(self.xuanzhuang)
self.pushButton_4.clicked.connect(self.attention)
#图片自适应
self.lb_input_img.setScaledContents(True)
self.lb_output_img.setScaledContents(True)
self.show()
def select_file(self):
file_path = QFileDialog.getOpenFileName(
caption="选择数据文件", filter="(*.jpg *.png *.jpeg)")
if file_path[0]:
self.file = file_path[0]
img_pix = QPixmap(self.file)
self.lb_input_img.setPixmap(img_pix)
self.img_temp = None
else:
# print("请重新选择图片")
QMessageBox.warning(self, "注意", "请先选择图片")
def shuaxin(self):
if self.img_temp:
self.lb_output_img.clear()
self.img_temp = None
else:
QMessageBox.warning(self, "注意", "请先处理图片")
def attention(self):
self.lb_output_img.setText(QCoreApplication.translate("process_img","1.目前旋转功能还有很多bug,某些图片不兼容,会出现显示不出来的问题,但保存结果有效 3.窗口有自适应,可以调整窗口大小", None))
font5 = QFont()
font5.setPointSize(10)
self.lb_output_img.setFont(font5)
self.lb_output_img.setAlignment(Qt.AlignLeft)
def xuanzhuang(self):
try:
self.img_temp = self.img_temp.transpose(Image.FLIP_TOP_BOTTOM)
# self.img_temp = None
#将滤镜处理结果变成图像数据
img_qt = ImageQt.ImageQt(self.img_temp)
#将图像数据转换成QPixmap类型
self.img_pix = QPixmap.fromImage(img_qt)
#设置标签内容为处理后的图片
self.lb_input_img.setPixmap(self.img_pix)
except:
QMessageBox.warning(self, "注意", "请先进行图像处理")
def process_img(self):
self.pbtn_file.setCheckable(False)
if self.img_temp:
img = self.img_temp
else:
#判断是否为空值,如果是返回True
if self.file:
img = Image.open(self.file)
else:
QMessageBox.warning(self, "注意", "请先选择图片")
return
#获取列表选择控件的当前选择项内容
text = self.cb_fileter_list.currentText()
#用if判断字符串
if "滤镜" in text:
#对图像进行滤镜处理
self.img_temp = img.filter(self.filters[text]).convert("RGBA")
elif text == "字符画":
self.img_temp = zifuchuan(img)
elif text == "素描":
self.img_temp = to_sketch(img)
elif text == "油画":
self.img_temp = you(img)
#将滤镜处理结果变成图像数据
img_qt = ImageQt.ImageQt(self.img_temp)
#将图像数据转换成QPixmap类型
img_pix = QPixmap.fromImage(img_qt)
#设置标签内容为处理后的图片
self.lb_output_img.setPixmap(img_pix)
def save_img(self):
if self.img_temp:
file_path = QFileDialog.getSaveFileName(
caption="保存图片", filter="*.png")
if file_path[0]:
save_path = file_path[0]
self.img_temp.save(save_path)
else:
QMessageBox.warning(self, "注意", "请重新选择保存位置")
else:
QMessageBox.warning(self, "注意", "请先进行图像处理")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = ProcessImg()
sys.exit(app.exec_())
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn