python實現將圖片批量轉換為jpg格式


需要用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_())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM