需要用Python寫個腳本,將圖片批量轉換為jpg格式,順便做成一個小軟件發布出來。
本文python運行環境:windows
首先,需要引入安裝pillow模塊
>>pip install pillow
如果安裝不成功,請使用管理員權限安裝。
直接跑腳本的話,代碼如下:
#!/usr/bin/python
# -*- coding:UTF-8 -*-
from PIL import Image
import os
import sys
if __name__ == '__main__':
if os.path.isfile(sys.argv[1]):
try:
image = Image.open(sys.argv[1])
image.save(os.path.splitext(sys.argv[1])[0] + ".jpg", quality=100)
print("image to jpg sucess: " + sys.argv[1])
except:
print("image to jpg fail: " + sys.argv[1])
else:
if os.path.exists(sys.argv[2]) == False:
os.makedirs(sys.argv[2])
for file in os.listdir(sys.argv[1]):
src = os.path.join(sys.argv[1], file)
print(src)
try:
image = Image.open(src)
dest = sys.argv[2] + "/" + os.path.splitext(file)[0] + ".jpg"
image.save(dest, quality=100)
print("image to jpg sucess: " + file)
except:
print("image to jpg fail: " + file)
引入PyQt5,開發圖形界面。代碼如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QTextEdit,
QHBoxLayout, QLineEdit, QGroupBox, QFormLayout,
QSlider, QLabel, QFileDialog, QMessageBox)
from PyQt5.QtCore import Qt
from PIL import Image
import os
import sys
class image2jpgWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('image2jpg')
self.resize(600, 150)
srcFoldChooser = QHBoxLayout()
self.srcFoldName = QLineEdit()
self.srcFoldName.setFocusPolicy(Qt.NoFocus)
self.srcFoldBtn = QPushButton('打開')
self.srcFoldBtn.clicked.connect(self.chooseSrcFolder)
srcFoldChooser.addWidget(self.srcFoldName)
srcFoldChooser.addWidget(self.srcFoldBtn)
desFoldChooser = QHBoxLayout()
self.desFoldName = QLineEdit()
self.desFoldName.setFocusPolicy(Qt.NoFocus)
self.desFoldBtn = QPushButton('另存為')
self.desFoldBtn.clicked.connect(self.chooseDesFolder)
desFoldChooser.addWidget(self.desFoldName)
desFoldChooser.addWidget(self.desFoldBtn)
confirmBox = QHBoxLayout()
self.qualitySlider = QSlider(Qt.Horizontal)
self.qualitySlider.setMaximum(100)
self.qualitySlider.setMinimum(20)
self.qualitySlider.setSingleStep(10)
#self.qualitySlider.setTickPosition(QSlider.TicksBelow)
self.qualitySlider.setTickInterval(10)
self.qualitySlider.setValue(100)
self.qualitySlider.valueChanged.connect(self.valChange)
self.qualityLabel1 = QLabel('圖片質量:')
self.qualityLabel2 = QLabel('100')
self.qualityLabel3 = QLabel('%')
self.confirmBtn = QPushButton('開始轉換')
self.confirmBtn.clicked.connect(self.startExchange)
confirmBox.addWidget(self.qualityLabel1)
confirmBox.addWidget(self.qualitySlider)
confirmBox.addWidget(self.qualityLabel2)
confirmBox.addWidget(self.qualityLabel3)
confirmBox.addWidget(self.confirmBtn)
srcFoldGroup = QGroupBox('')
srcFoldGroup.setLayout(srcFoldChooser)
desFoldGroup = QGroupBox('')
desFoldGroup.setLayout(desFoldChooser)
confirmGroup = QGroupBox('')
confirmGroup.setLayout(confirmBox)
layout = QFormLayout()
layout.addWidget(srcFoldGroup)
layout.addWidget(desFoldGroup)
layout.addWidget(confirmGroup)
self.setLayout(layout)
#btn = QPushButton('Hello')
#btn = QPushButton('Hello', self)
#textEdit = QTextEdit(self)
self.show()
def valChange(self):
self.qualityLabel2.setNum(self.qualitySlider.value())
def chooseSrcFolder(self):
#選擇要轉換圖片的文件夾
srcDirectoy = QFileDialog.getExistingDirectory(self, '打開要轉換圖片的文件夾', "./")
#srcDirectoy = srcDirectoy.replace('/', '\\')
self.srcFoldName.setText(srcDirectoy)
def chooseDesFolder(self):
#選擇目標文件夾
desDirectoy = QFileDialog.getExistingDirectory(self, '打開目標文件夾', "./")
#desDirectoy = desDirectoy.replace('/', '\\')
self.desFoldName.setText(desDirectoy)
def startExchange(self):
if self.srcFoldName.text() == "":
QMessageBox.critical(self, 'image2jpg', '源文件夾為空!', QMessageBox.Yes, QMessageBox.Yes)
return
if not os.path.exists(self.srcFoldName.text()):
QMessageBox.critical(self, 'image2jpg', '源文件夾不存在或路徑非法!', QMessageBox.Yes, QMessageBox.Yes)
return
if self.desFoldName.text() == "":
QMessageBox.critical(self, 'image2jpg', '目標文件夾為空!', QMessageBox.Yes, QMessageBox.Yes)
return
elif not os.path.exists(self.srcFoldName.text()):
QMessageBox.critical(self, 'image2jpg', '目標文件夾不存在或路徑非法!', QMessageBox.Yes, QMessageBox.Yes)
return
for file in os.listdir(self.srcFoldName.text()):
#src = os.path.join(self.srcFoldName.text(), file)
src = os.path.join(self.srcFoldName.text(), file)
print(self.srcFoldName.text())
print(src)
try:
image = Image.open(src)
dest = self.desFoldName.text() + "/" + os.path.splitext(file)[0] + ".jpg"
print(dest)
image.save(dest, quality=self.qualitySlider.value())
print("image to jpg sucess: " + file)
except:
print("image to jpg fail: " + file)
reply = QMessageBox.question(self,'image2jpg', '文件' + file + '轉換出錯,請問繼續嗎?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.No:
print("yes")
else:
return
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = image2jpgWindow()
sys.exit(app.exec_())