python之pyqt5-第一个pyqt5程序-图像压缩工具-小记
(如想转载,请联系博主或贴上本博地址)
此为学习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程序-图像压缩工具-小记的更多相关文章
- python练习册 每天一个小程序 第0013题
# -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...
- python练习册 每天一个小程序 第0001题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生 ...
- python练习册 每天一个小程序 第0000题
PIL库学习链接:http://blog.csdn.net/column/details/pythonpil.html?&page=1 1 #-*-coding:utf-8-*- 2 __au ...
- python练习册 每天一个小程序 第0007题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但 ...
- python练习册 每天一个小程序 第0010题
# -*-coding:utf-8-*- ''' 题目描述: 使用 Python 生成类似于下图中的字母验证码图片 思路: 运用PIL库加random 随机字母进行生成 ''' import rand ...
- python练习册 每天一个小程序 第0009题
1 ''' 2 题目描述: 3 找出一个html文件中所有的url 4 5 思路 : 6 利用正则表达式进行匹配 7 8 ''' 9 10 11 import re 12 13 14 with ope ...
- python练习册 每天一个小程序 第0008题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 一个HTML文件,找出里面的正文. 6 7 思路: 8 利用Beautiful ...
- python练习册 每天一个小程序 第0006题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目描述: 5 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都 ...
- python练习册 每天一个小程序 第0005题
1 # -*-coding:utf-8-*- 2 __author__ = 'Deen' 3 ''' 4 题目说明: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小 ...
- python练习册 每天一个小程序 第0012题
# -*-coding:utf-8-*- def test(content): text = content flag = 0 with open('filtered_words.txt') as f ...
随机推荐
- XJTUOJ #1323. [L2-2]三倍满世界
题目 https://oj.xjtuicpc.com/problem/1323 思路 题目说明有点绕. 然后我们仔细观察一下,这个东西很显然是一个天然的树形结构. 我们可以把一个空间(或者一个数)当成 ...
- kibana7.6.2内网windows系统下编译打包部署
1.在kibana根目录下执行命令: yarn build --skip-os-packages 2.报错无法下载node:将node相关文件下载放到kibana/.node_binaries/10 ...
- PostScript语言教程(五、文本打印)
5.1.POSTSCRIPT字体 字体是具有统一规格的字符集.其中包含数百个字符集,包含熟悉的TIMES和HELVETICA 使用POSTSCRIPT字体 在你打印文本之前,你需要指定所需的字体,这个 ...
- 【2020NOI.AC省选模拟#7】A. t1
题目链接 原题解: 由于$+$满足幂等性,我们可以设$f_{i,j}$为从$i$号点向根$2^j$个点的权值之和,并且倍增计算出$f$.在查询是,可以像ST表一样用至多四个$f$中的路径拼出询问路径. ...
- 记一次ajax文件上传
一个新需求提交页面. 在页面提交的时候,使用的是,先上传文件再上传表单 在这里需要返回表单存储的文件地址,需要上传.所以.在上传文件之后会返回存储的地址. 这里犯的一个错误: 往input 的type ...
- D. Steps to One
题意 初始有一个空数组\(a\),接下来每次操作会这么做: 在\([1,n]\)中选择一个数,将其拼接在数组\(a\)后. 计算数组\(a\)的\(\gcd\). 如果结果是\(1\),退出. 否则, ...
- sign签名
$sign = array( 'ip'=>'1.15.23.31' // array('ip'=>'2.34.45.34'), ); $ip = setSign($sign); for ( ...
- 【jenkins】jenkins 持续集成本地项目(win)
[项目]--->[配置]: [源码管理]= 无 [Pre Steps]:(因为是windows下,本地装有maven,直接用maven构建,又是个测试用例,就直接用mvn test) 选择win ...
- Vue-数据代理
Vue中的数据代理 数据代理定义 所谓数据代理,就是通过一个对象代理对另一个对象中的属性的操作(读/写).说白了就是操作一个对象上的属性可以读取和修改另一个对象上的属性,这种关系就叫做数据代理. 在V ...
- Think in UNL其一
书中提到世界本质上为离散的,由一个一个对象组成.其实这个观点并不难理解,因为在公元前5世纪芝诺就有了类似的思考,著名的阿基里斯悖论早已经被推翻,现代物理学已经证明了时间和空间不是可以无限分割的,所以总 ...