猫史档案馆


【Python作品分享】ui_process_img代码【求助帖】

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


【作品展示】

center_image

 

【作品介绍】

大佬们,能帮我解决旋转功能的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


回复

上一页1 页 / 共 1下一页
BKS乄MCproblemBKS乄MCproblem

好家伙你把ui文件都装到代码里去了这还是挺省事的,就这么跟你说吧我估计你也看不到了,我对旋转可谓一窍不通但你能发图描述一下旋转有什么漏洞吗?

点赞1


评论