IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 压缩图片 python实现 -> 正文阅读

[Python知识库]压缩图片 python实现

首先上代码
如果不想复制粘贴 请去下载:
链接:https://pan.baidu.com/s/1DG7beVFvQE_gW_QHz7-HYQ
提取码:mtha

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_())
  • 运行 此文件
    在这里插入图片描述

  • 运行完成后会弹出此窗口
    分别输入图片所在位置 和 压缩后的输出图片地址在这里插入图片描述

  • 这是我压缩前的图片信息
    在这里插入图片描述

  • 压缩成功
    在这里插入图片描述

  • 压缩后的图片信息
    在这里插入图片描述

  • 注意 : 当图片达到最大压缩限度 虽然会提示压缩成功但是并没有对其进行压缩处理。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:07:41  更:2021-07-15 16:07:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:37:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码