前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【压缩图片】 python

【压缩图片】 python

作者头像
用户4793865
发布2023-01-12 14:40:32
6160
发布2023-01-12 14:40:32
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym

这是我参与8月更文挑战的第四天

首先上代码

如果不想复制粘贴 请去下载:

链接:https://pan.baidu.com/s/1DG7beVFvQE_gW_QHz7-HYQ

提取码:mtha

代码语言:javascript
复制
import sys
from PyQt5 import QtWidgets,QtGui,QtCore,Qt
from PIL import Image
import os
class GUI(QtWidgets.QWidget):
    def __init__(self):
        #初始化————init__
        super().__init__()
        self.initGUI()
    def initGUI(self):
        #设置窗口大小
        self.resize(500,500)
        #设置窗口位置(下面配置的是居于屏幕中间)
        qr = self.frameGeometry()
        cp = QtWidgets.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
        #设置窗口标题和图标
        self.setWindowTitle('图片压缩')
        self.setWindowIcon(QtGui.QIcon('2.png'))
        #设置窗口提示
        self.setToolTip('窗口提示')
        #设置label信息
        self.label = QtWidgets.QLabel(self)
        # setGeometry(左右, 上下, 宽, 高)
        self.label.setGeometry(QtCore.QRect(80, 10, 330, 80))
        self.label.setText('请输入图片所在路径(如:C:/Users/13509/Desktop/670.png)')
        self.label.setObjectName('label')
        # 设置label提示
        self.label.setToolTip('label提示')
        
         #设置label信息
        self.label1 = QtWidgets.QLabel(self)
        # setGeometry(左右, 上下, 宽, 高)
        self.label1.setGeometry(QtCore.QRect(80, 100, 330, 80))
        self.label1.setText('请输入图片输出路径(如:C:/Users/13509/Desktop/670.png)')
        self.label1.setObjectName('label')
        # 设置label提示
        self.label1.setToolTip('label提示')
        
        
        
        #设置输入框
        self.textbox = Qt.QLineEdit(self)
        self.textbox.resize(320,40)
        self.textbox.move(90, 80)
        #设置输入框1
        self.textbox1 = Qt.QLineEdit(self)
        self.textbox1.resize(320,40)
        self.textbox1.move(90, 160)
        # 设置输入框提示
        self.textbox.setToolTip('输入框提示')
        #设置按钮
        self.btn =QtWidgets.QPushButton('压缩图片',self)
        self.btn.resize(200,40)
        self.btn.move(140,220)
        # 设置按钮样式
        self.btn.setStyleSheet("background-color: #FF3333;"
                          "border-color: rgb(170, 150, 163);"
                          "font: 75 12pt \"Arial Narrow\";"
                          "color: rgb(126, 255, 46);")
        # 设置按钮提示
        self.btn.setToolTip('按钮提示')
        #点击鼠标触发事件
        self.btn.clicked.connect(self.clickbtn)
        #展示窗口
        self.show();
    #点击鼠标触发函数
    def clickbtn(self):
        #打印出输入框的信息
        oldImgae = self.textbox.text()
        newImage = self.textbox1.text()
        compress_image(oldImgae,newImage)
        QtWidgets.QMessageBox.question(self, "信息", '压缩成功',QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok)
        #清空输入框信息
       # self.oldImgae.setText('')
    #关闭窗口事件重写
    def closeEvent(self, QCloseEvent):
        reply = QtWidgets.QMessageBox.question(self, '警告',"确定关闭当前窗口?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
        if reply == QtWidgets.QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()

def get_size(file):
    # 获取文件大小:KB
    size = os.path.getsize(file)
    return size / 1024

def get_outfile(infile, outfile):
    if outfile:
        return outfile
    dir, suffix = os.path.splitext(infile)
    outfile = '{}-out{}'.format(dir, suffix)
    return outfile
def compress_image(infile, outfile='', mb=1500, step=10, quality=80):
    """不改变图片尺寸压缩到指定大小
    :param infile: 压缩源文件
    :param outfile: 压缩文件保存地址
    :param mb: 压缩目标,KB
    :param step: 每次调整的压缩比率
    :param quality: 初始压缩比率
    :return: 压缩文件地址,压缩文件大小
    """
    o_size = get_size(infile)
    if o_size <= mb:
        return infile
    outfile = get_outfile(infile, outfile)
    while o_size > mb:
        im = Image.open(infile)
        im.save(outfile, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)
    return outfile, get_size(outfile)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    gui = GUI()
    sys.exit(app.exec_())

运行 此文件

image.png
image.png

运行完成后会弹出此窗口

image.png
image.png

分别输入图片所在位置 和 压缩后的输出图片地址

image.png
image.png

这是我压缩前的图片信息

image.png
image.png

压缩成功

image.png
image.png

压缩后的图片信息

image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档