Python图片格式转换,图片压缩

3 篇文章 0 订阅
该代码示例展示了如何利用Python的PyQt库创建一个图形用户界面(GUI),用户可以选择图片进行格式转换(如JPG到PNG,PNG到ICO等)并进行压缩。程序包含选择图片、保存图片、设定压缩比例等功能,适用于简单的图片处理任务。
摘要由CSDN通过智能技术生成

PyQt 图片格式转换,图片压缩

界面展示

在这里插入图片描述

# -*- coding: utf-8 -*-
import os

from PIL import Image
from PIL.ImageFile import ImageFile

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QFileDialog, QVBoxLayout, QMessageBox


class Ui_MainWindow(object):
    def __init__(self):
        self.outfile = None  # 压缩后的图片路径
        self.img_suffix = None  # 选择的图片后缀
        self.choose_ing_img = None
        self.type = "png"  # 保存的图片后缀

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("background-color: rgb(229, 246, 255);")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.choose_img = QtWidgets.QLabel(self.centralwidget)
        self.choose_img.setGeometry(QtCore.QRect(50, 70, 191, 161))
        self.choose_img.setStyleSheet("background-color: rgb(184, 184, 184);")
        self.choose_img.setText("")
        self.choose_img.setObjectName("choose_img")
        self.save_img = QtWidgets.QLabel(self.centralwidget)
        self.save_img.setGeometry(QtCore.QRect(50, 330, 201, 171))
        self.save_img.setStyleSheet("background-color: rgb(186, 186, 186);")
        self.save_img.setText("")
        self.save_img.setObjectName("save_img")
        self.choose_btn = QtWidgets.QPushButton(self.centralwidget)
        self.choose_btn.setGeometry(QtCore.QRect(300, 130, 91, 41))
        self.choose_btn.setStyleSheet("color: rgb(255, 170, 127);\n"
                                      "background-color: rgb(234, 219, 255);\n"
                                      "font: 14pt \"华文行楷\";")
        self.choose_btn.setObjectName("choose_btn")
        self.save_btn = QtWidgets.QPushButton(self.centralwidget)
        self.save_btn.setGeometry(QtCore.QRect(300, 380, 91, 41))
        self.save_btn.setStyleSheet("color: rgb(85, 170, 127);\n"
                                    "background-color: rgb(221, 255, 210);\n"
                                    "font: 14pt \"华文行楷\";")
        self.save_btn.setObjectName("save_btn")
        self.jpg_png = QtWidgets.QPushButton(self.centralwidget)
        self.jpg_png.setGeometry(QtCore.QRect(430, 70, 101, 51))
        self.jpg_png.setStyleSheet("color: rgb(170, 134, 123);\n"
                                   "background-color: rgb(221, 201, 255);\n"
                                   "font: 15pt \"华文琥珀\";")
        self.jpg_png.setObjectName("jpg_png")
        self.png_jpg = QtWidgets.QPushButton(self.centralwidget)
        self.png_jpg.setGeometry(QtCore.QRect(550, 300, 101, 51))
        self.png_jpg.setStyleSheet("font: 15pt \"华文琥珀\";\n"
                                   "color: rgb(170, 255, 255);\n"
                                   "background-color: rgb(255, 170, 127);\n"
                                   "")
        self.png_jpg.setObjectName("png_jpg")
        self.jpg_webp = QtWidgets.QPushButton(self.centralwidget)
        self.jpg_webp.setGeometry(QtCore.QRect(670, 70, 101, 51))
        self.jpg_webp.setStyleSheet("font: 13pt \"华文琥珀\";\n"
                                    "background-color: rgb(255, 211, 222);\n"
                                    "color: rgb(85, 170, 0);")
        self.jpg_webp.setObjectName("jpg_webp")
        self.png_ico = QtWidgets.QPushButton(self.centralwidget)
        self.png_ico.setGeometry(QtCore.QRect(430, 300, 101, 51))
        self.png_ico.setStyleSheet("font: 15pt \"华文琥珀\";\n"
                                   "background-color: rgb(175, 206, 255);\n"
                                   "color: rgb(115, 141, 255);")
        self.png_ico.setObjectName("png_ico")
        self.ya_suo_btn = QtWidgets.QPushButton(self.centralwidget)
        self.ya_suo_btn.setGeometry(QtCore.QRect(430, 420, 101, 51))
        self.ya_suo_btn.setStyleSheet("font: 15pt \"华文琥珀\";\n"
                                      "background-color: rgb(255, 230, 207);\n"
                                      "color: rgb(131, 255, 124);")
        self.ya_suo_btn.setObjectName("ya_suo_btn")
        self.webp_png = QtWidgets.QPushButton(self.centralwidget)
        self.webp_png.setGeometry(QtCore.QRect(670, 190, 101, 51))
        self.webp_png.setStyleSheet("font: 13pt \"华文琥珀\";\n"
                                    "background-color: rgb(123, 154, 255);\n"
                                    "color: rgb(171, 255, 114);")
        self.webp_png.setObjectName("webp_png")
        self.png_icns = QtWidgets.QPushButton(self.centralwidget)
        self.png_icns.setGeometry(QtCore.QRect(670, 300, 101, 51))
        font = QtGui.QFont()
        font.setFamily("Berlin Sans FB Demi")
        font.setPointSize(13)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.png_icns.setFont(font)
        self.png_icns.setStyleSheet("font: 75 13pt \"Berlin Sans FB Demi\";\n"
                                    "background-color: rgb(255, 248, 165);\n"
                                    "color: rgb(149, 255, 193);")
        self.png_icns.setObjectName("png_icns")
        self.webp_jpg = QtWidgets.QPushButton(self.centralwidget)
        self.webp_jpg.setGeometry(QtCore.QRect(430, 190, 101, 51))
        self.webp_jpg.setStyleSheet("font: 13pt \"华文琥珀\";\n"
                                    "background-color: rgb(94, 121, 111);\n"
                                    "color: rgb(255, 111, 217);")
        self.webp_jpg.setObjectName("webp_jpg")
        self.start_ya_suo = QtWidgets.QSpinBox(self.centralwidget)
        self.start_ya_suo.setGeometry(QtCore.QRect(560, 400, 61, 31))
        self.start_ya_suo.setObjectName("start_ya_suo")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(570, 440, 61, 31))
        self.label.setStyleSheet("font: 10pt \"华文琥珀\";")
        self.label.setObjectName("label")
        self.end_ya_suo = QtWidgets.QSpinBox(self.centralwidget)
        self.end_ya_suo.setGeometry(QtCore.QRect(560, 470, 61, 31))
        self.end_ya_suo.setObjectName("end_ya_suo")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(580, 510, 61, 31))
        self.label_2.setStyleSheet("font: 10pt \"华文琥珀\";")
        self.label_2.setObjectName("label_2")
        self.jpg_jpeg = QtWidgets.QPushButton(self.centralwidget)
        self.jpg_jpeg.setGeometry(QtCore.QRect(550, 70, 101, 51))
        self.jpg_jpeg.setStyleSheet("font: 15pt \"华文琥珀\";\n"
                                    "background-color: rgb(205, 240, 255);\n"
                                    "color: rgb(76, 145, 255);")
        self.jpg_jpeg.setObjectName("jpg_jpeg")
        self.webp_jpeg = QtWidgets.QPushButton(self.centralwidget)
        self.webp_jpeg.setGeometry(QtCore.QRect(550, 190, 101, 51))
        self.webp_jpeg.setStyleSheet("font: 13pt \"华文琥珀\";\n"
                                     "background-color: rgb(255, 184, 184);\n"
                                     "color: rgb(255, 112, 244);")
        self.webp_jpeg.setObjectName("webp_jpeg")
        self.line_3 = QtWidgets.QFrame(self.centralwidget)
        self.line_3.setGeometry(QtCore.QRect(10, 30, 771, 20))
        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.line_4 = QtWidgets.QFrame(self.centralwidget)
        self.line_4.setGeometry(QtCore.QRect(10, 530, 781, 20))
        self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        self.line_5 = QtWidgets.QFrame(self.centralwidget)
        self.line_5.setGeometry(QtCore.QRect(-7, 40, 31, 501))
        self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_5.setObjectName("line_5")
        self.line_6 = QtWidgets.QFrame(self.centralwidget)
        self.line_6.setGeometry(QtCore.QRect(770, 40, 20, 511))
        self.line_6.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_6.setObjectName("line_6")
        self.line_7 = QtWidgets.QFrame(self.centralwidget)
        self.line_7.setGeometry(QtCore.QRect(270, 40, 20, 501))
        self.line_7.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_7.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_7.setObjectName("line_7")
        self.line_8 = QtWidgets.QFrame(self.centralwidget)
        self.line_8.setGeometry(QtCore.QRect(400, 40, 20, 501))
        self.line_8.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_8.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_8.setObjectName("line_8")
        self.line_9 = QtWidgets.QFrame(self.centralwidget)
        self.line_9.setGeometry(QtCore.QRect(530, 40, 20, 351))
        self.line_9.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_9.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_9.setObjectName("line_9")
        self.line_10 = QtWidgets.QFrame(self.centralwidget)
        self.line_10.setGeometry(QtCore.QRect(650, 40, 20, 501))
        self.line_10.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_10.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_10.setObjectName("line_10")
        self.line_11 = QtWidgets.QFrame(self.centralwidget)
        self.line_11.setGeometry(QtCore.QRect(410, 150, 371, 16))
        self.line_11.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_11.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_11.setObjectName("line_11")
        self.line_12 = QtWidgets.QFrame(self.centralwidget)
        self.line_12.setGeometry(QtCore.QRect(580, 150, 371, 16))
        self.line_12.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_12.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_12.setObjectName("line_12")
        self.line_13 = QtWidgets.QFrame(self.centralwidget)
        self.line_13.setGeometry(QtCore.QRect(410, 270, 371, 16))
        self.line_13.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_13.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_13.setObjectName("line_13")
        self.line_14 = QtWidgets.QFrame(self.centralwidget)
        self.line_14.setGeometry(QtCore.QRect(410, 380, 371, 16))
        self.line_14.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_14.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_14.setObjectName("line_14")
        self.line_15 = QtWidgets.QFrame(self.centralwidget)
        self.line_15.setGeometry(QtCore.QRect(280, 270, 131, 16))
        self.line_15.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_15.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_15.setObjectName("line_15")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(300, 0, 191, 31))
        font = QtGui.QFont()
        font.setFamily("华文琥珀")
        font.setPointSize(15)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("color: rgb(102, 255, 107);\n"
                                   "font: 15pt \"华文琥珀\";")
        self.label_3.setObjectName("label_3")
        self.jpeg_png = QtWidgets.QPushButton(self.centralwidget)
        self.jpeg_png.setGeometry(QtCore.QRect(670, 440, 101, 51))
        self.jpeg_png.setStyleSheet("font: 13pt \"华文琥珀\";\n"
                                    "color: rgb(0, 170, 255);\n"
                                    "background-color: rgb(170, 255, 127);")
        self.jpeg_png.setObjectName("jpeg_png")

        self.save_label = QtWidgets.QLabel(self.centralwidget)
        self.save_label.setGeometry(QtCore.QRect(100, 300, 111, 21))
        self.save_label.setStyleSheet("color: rgb(170, 85, 255);\n"
                                      "background-color: rgb(185, 216, 255);\n"
                                      "font: 16pt \"华文琥珀\";")
        self.save_label.setObjectName("save_label")
        self.choose_label = QtWidgets.QLabel(self.centralwidget)
        self.choose_label.setGeometry(QtCore.QRect(90, 40, 121, 21))
        self.choose_label.setStyleSheet("color: rgb(170, 85, 255);\n"
                                        "background-color: rgb(185, 216, 255);\n"
                                        "font: 16pt \"华文琥珀\";")
        self.choose_label.setObjectName("choose_label")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(340, 530, 311, 31))
        self.label_4.setStyleSheet("font: 13pt \"Agency FB\";\n"
                                   "color: rgb(255, 20, 12);")
        self.label_4.setObjectName("label_4")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        layout = QVBoxLayout()
        self.start_ya_suo.setValue(2)  # 设置压缩最小的初始步长
        self.end_ya_suo.setValue(100)  # 设置压缩最大的初始步长

        self.start_ya_suo.setMinimum(1)  # 设置最小值为1kb
        self.end_ya_suo.setMaximum(1024 * 10)  # 设置最大值为10M

        self.choose_btn.clicked.connect(self.open_image)  # 选择图片
        self.save_btn.clicked.connect(self.saveImage)  # 保存图片
        self.ya_suo_btn.clicked.connect(self.get_ya_suo) # 压缩图片

       *********
      ********* 全部代码关注后私信获取
        *********

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.choose_btn.setText(_translate("MainWindow", "选择图片"))
        self.save_btn.setText(_translate("MainWindow", "保存图片"))
        self.jpg_png.setText(_translate("MainWindow", "JPG→PNG"))
        self.png_jpg.setText(_translate("MainWindow", "Png→Jpg"))
        self.jpg_webp.setText(_translate("MainWindow", "Jpg→WEBP"))
        self.png_ico.setText(_translate("MainWindow", "Png→ico"))
        self.ya_suo_btn.setText(_translate("MainWindow", "压缩图片"))
        self.webp_png.setText(_translate("MainWindow", "WEBP→Png"))
        self.png_icns.setText(_translate("MainWindow", "Png→icns"))
        self.webp_jpg.setText(_translate("MainWindow", "WEBP→Jpg"))
        self.label.setText(_translate("MainWindow", "KB 至"))
        self.label_2.setText(_translate("MainWindow", "KB"))
        self.jpg_jpeg.setText(_translate("MainWindow", "Jpg→Jpeg"))
        self.webp_jpeg.setText(_translate("MainWindow", "WEBP→Jpeg"))
        self.label_3.setText(_translate("MainWindow", "阿边的图片转换工具"))
        self.jpeg_png.setText(_translate("MainWindow", "Jpeg→Png"))
        self.save_label.setText(_translate("MainWindow", "无格式"))
        self.choose_label.setText(_translate("MainWindow", "无格式"))
        self.label_4.setText(_translate("MainWindow", "⚠️:压缩图片时,请自行保存副本,压缩会改变源文件"))

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

全部代码关注后私信获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值