(如想转载,请联系博主或贴上本博地址)

此为学习pyqt5的第一个程序,图像压缩工具。

因为比较简单,下面直接贴上代码。

效果图如下:

# -*- coding: utf-8 -*-
import sys
#import resource 图标资源可不要
from os import path
from PIL import Image
from glob import glob
from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5 import QtCore,QtGui
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QFileDialog
class Ui_Form(QMainWindow):
def __init__(self):
super(QtWidgets.QMainWindow,self).__init__()
self.setupUi(self)
self.retranslateUi(self) def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(368, 260)
MainWindow.setFixedSize(368, 260)
MainWindow.setWindowTitle('图像压缩工具')
MainWindow.setWindowIcon(QIcon(':/1.png'))
#label标签
self.label = QtWidgets.QLabel(MainWindow)
self.label.setGeometry(QtCore.QRect(10, 30, 341, 31))
self.label.setObjectName("label")
self.label.setText("注:轻度压缩3-6倍左右,重度压缩6-10倍左右")
font = QtGui.QFont()
font.setFamily('微软雅黑')
font.setPointSize(12)
font.setBold(True)
font.setWeight(85)
self.label.setFont(font) self.pushButton = QtWidgets.QPushButton(MainWindow)
self.pushButton.setGeometry(QtCore.QRect(40, 140, 101, 41))
self.pushButton.setCheckable(False)
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("选择图片重度压缩")
self.pushButton.clicked.connect(self.openfileZ) self.pushButton_2 = QtWidgets.QPushButton(MainWindow)
self.pushButton_2.setGeometry(QtCore.QRect(180, 140, 151, 41))
self.pushButton_2.setCheckable(False)
self.pushButton_2.setText("选择文件夹重度压缩")
self.pushButton_2.clicked.connect(self.opendicZ) self.pushButton_3 = QtWidgets.QPushButton(MainWindow)
self.pushButton_3.setGeometry(QtCore.QRect(40, 90, 101, 41))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_3.setText("选择图片轻度压缩")
self.pushButton_3.clicked.connect(self.openfile) self.pushButton_4 = QtWidgets.QPushButton(MainWindow)
self.pushButton_4.setGeometry(QtCore.QRect(180, 90, 151, 41))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_4.setText("选择文件夹轻度压缩")
self.pushButton_4.clicked.connect(self.opendic) self.label = QtWidgets.QLabel(MainWindow)
self.label.setGeometry(QtCore.QRect(70, 140, 61, 21))
self.label.setText("")
self.label.setObjectName("label") def retranslateUi(self,MainWindow):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("MainWindow", "图像压缩")) def openfile(self):
filename ,filetype = QFileDialog.getOpenFileName(self,"选择文件","./","All Files (*);;Image Files (*.jpg)")
if filename != '':
path=filename.replace(r'/',r'\\')
size = (1024,600)
# 定义要调整成为的尺寸(PIL会自动根据原始图片的长宽比来缩放适应设置的尺寸)
try:
img = Image.open(path) # 打开图片文件
if img.width>5:
img.thumbnail(size, Image.ANTIALIAS) # 使用抗锯齿模式生成缩略图(压缩图片)
f=os.path.splitext(path)
newname=f[0] + '-已压缩'
newname=newname+f[1]
img.save(newname, "JPEG") # 保存成与原文件名一致的文件,会自动覆盖源文件
else:
print(file + "宽度小于1200px,无需处理,已忽略")
except OSError:
print(file + "文件错误,忽略")
QMessageBox.information(self,"恭喜,成功了!", "已成功压缩图片到原有目录",QMessageBox.Yes | QMessageBox.No) def openfileZ(self):
filename ,filetype = QFileDialog.getOpenFileName(self,"选择文件","./","All Files (*);;Image Files (*.jpg)")
if filename != '':
path=filename.replace(r'/',r'\\')
size = (835,470)
try:
img = Image.open(path)
if img.width>5:
img.thumbnail(size, Image.ANTIALIAS)
f=os.path.splitext(path)
newname=f[0] + '-已压缩'
newname=newname+f[1]
img.save(newname, "JPEG")
else:
print(file + "宽度小于1200px,无需处理,已忽略")
except OSError:
print(file + "文件错误,忽略")
QMessageBox.information(self,"恭喜,成功了!", "已成功压缩图片到原有目录",QMessageBox.Yes | QMessageBox.No) def opendic(self):
dic = QFileDialog.getExistingDirectory(self,"选择文件夹", "./")
if dic != '':
path=dic.replace(r'/',r'\\')
size = (1024, 600)
files = glob( path + "**/*.JPG", recursive=True) + glob(path + "**/*.jpg", recursive=True)
total = len(files)
cur = 1
for infile in files:
try:
print("进度:" + str(cur) + "/" + str(total) + " " + infile)
img = Image.open(infile)
if img.width>5:
img.thumbnail(size, Image.ANTIALIAS)
f=os.path.splitext(infile)
newname=f[0] + '-已压缩'
newname=newname+f[1]
img.save(newname, "JPEG")
else:
print(infile + "宽度小于1200px,无需处理,已忽略")
cur = cur + 1
except OSError:
print(infile + "文件错误,忽略")
QMessageBox.information(self,"恭喜,成功了!", "已成功压缩图片到原有目录",QMessageBox.Yes | QMessageBox.No) def opendicZ(self):
dic = QFileDialog.getExistingDirectory(self,"选择文件夹", "./")
if dic != '':
path=dic.replace(r'/',r'\\')
size = (835, 470)
# glob.glob()用来进行模糊查询,增加参数recursive=True后可以使用**/来匹配所有子目录
files = glob( path + "**/*.JPG", recursive=True) + glob(path + "**/*.jpg", recursive=True)
total = len(files)
cur = 1
for infile in files:
try:
print("进度:" + str(cur) + "/" + str(total) + " " + infile)
img = Image.open(infile)
if img.width>5:
img.thumbnail(size, Image.ANTIALIAS)
# 分离文件名和后缀
f=os.path.splitext(infile)
newname=f[0] + '-已压缩'
newname=newname+f[1]
img.save(newname, "JPEG")
else:
print(infile + "宽度小于1200px,无需处理,已忽略")
cur = cur + 1
except OSError:
print(infile + "文件错误,忽略")
QMessageBox.information(self,"恭喜,成功了!", "已成功压缩图片到原有目录",QMessageBox.Yes | QMessageBox.No) if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

python之pyqt5-第一个pyqt5程序-图像压缩工具-小记的更多相关文章

  1. python练习册 每天一个小程序 第0013题

    # -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...

  2. python练习册 每天一个小程序 第0001题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生 ...

  3. python练习册 每天一个小程序 第0000题

    PIL库学习链接:http://blog.csdn.net/column/details/pythonpil.html?&page=1 1 #-*-coding:utf-8-*- 2 __au ...

  4. python练习册 每天一个小程序 第0007题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但 ...

  5. python练习册 每天一个小程序 第0010题

    # -*-coding:utf-8-*- ''' 题目描述: 使用 Python 生成类似于下图中的字母验证码图片 思路: 运用PIL库加random 随机字母进行生成 ''' import rand ...

  6. python练习册 每天一个小程序 第0009题

    1 ''' 2 题目描述: 3 找出一个html文件中所有的url 4 5 思路 : 6 利用正则表达式进行匹配 7 8 ''' 9 10 11 import re 12 13 14 with ope ...

  7. python练习册 每天一个小程序 第0008题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 一个HTML文件,找出里面的正文. 6 7 思路: 8 利用Beautiful ...

  8. python练习册 每天一个小程序 第0006题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都 ...

  9. python练习册 每天一个小程序 第0005题

    1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目说明: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小 ...

  10. python练习册 每天一个小程序 第0012题

    # -*-coding:utf-8-*- def test(content): text = content flag = 0 with open('filtered_words.txt') as f ...

随机推荐

  1. PyMySQL查询

    title: PyMySQL查询 author: 杨晓东 permalink: PyMySQL查询 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - ...

  2. BFS板子题

    #include <iostream> #include <string> #include <queue> using namespace std; int n, ...

  3. git常用命令查询手册

    默认已经连接到远程仓库的情况下 本地文件夹初始化成git仓库.提交本地仓库并添加注释 git init git add 文件1(文件夹1) 文件2(文件夹2)... git commit -m &qu ...

  4. b站——沐神——深度学习

    预备知识 数据操作 MXNet nd:(array函数:得到NDArray) [[1. 1. 1.] [1. 1. 1.]] <NDArray 2x3 @cpu(0)> np:(asnum ...

  5. win10下 pytorch 跑模型 gpu利用率低

    查阅资料后发现 Dataloader中的num_workers参数(线程数)设置为0,该为4后,nvidia-smi查看GPU占用率变为高(不要用任务管理器查看)

  6. DataTable TO List<T>

    datatable转list<> public IList<T> GetList<T>(DataTable table){IList<T> list = ...

  7. kafka工具的使用-发送数据

    1.了解推送数据的是哪个topic,选择对应topic下面的partition分区 2.右侧界面选择Data,并点击『+』号: 3.可选择添加单个消息『add Single Message』或者添加多 ...

  8. vue+element el-table有关Checkbox的一些功能

    在做项目的时候会碰到一些表格操作的问题其中我归整了一下有关于多选功能的一些记录 一:默认选中其中一行 <el-table class="editTable" :data=&q ...

  9. Sharp7与S7NetPlus 性能测试

    介绍 ​ Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...

  10. asm 理解

    stm32中有3条总线:地址总线,数据总线,系统总线:地址总线上是地址值,数据总线上是数据值,cpu读写时会先在地址总线上传输地址值,如果是写操作之后数据总线上会放往前面地址处写入的数据值,如果是读操 ...