diff --git a/Image-Convertor.py b/Image-Convertor.py new file mode 100644 index 0000000..e62eeaa --- /dev/null +++ b/Image-Convertor.py @@ -0,0 +1,121 @@ +import os +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QFont +from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QPushButton, QLabel, QMessageBox +from PIL import Image + +class ImageConverter(QMainWindow): + def __init__(self): + super().__init__() + self.initUI() + + def initUI(self): + self.setWindowTitle('Image Converter') + self.setGeometry(100, 100, 500, 275) + self.setFixedSize(500, 275) + self.setStyleSheet('background-color:#e2e2e2;') + + self.title_label = QLabel('Image Converter', self) + self.title_label.setGeometry(10, 10, 500, 50) + font = QFont('Arial', 18, QFont.Bold) + self.title_label.setFont(font) + self.title_label.setStyleSheet('color: #2a8c2a; text-align: center;') + + self.input_path_label = QLabel('Select input folder or file:', self) + self.input_path_label.setGeometry(10, 70, 300, 30) + font = QFont('Arial', 9) + self.input_path_label.setFont(font) + self.input_path_label.setStyleSheet('color: #2a2a2a;') + + self.input_path_button = QPushButton('Browse', self) + self.input_path_button.setGeometry(360, 70, 100, 30) + font = QFont('Arial', 9) + self.input_path_button.setFont(font) + self.input_path_button.setStyleSheet('color: white; background-color: #2a80ff; border-radius: 5px;') + self.input_path_button.clicked.connect(self.selectInput) + + self.output_path_label = QLabel('Select output folder:', self) + self.output_path_label.setGeometry(10, 110, 300, 30) + font = QFont('Arial', 9) + self.output_path_label.setFont(font) + self.output_path_label.setStyleSheet('color: #2a2a2a;') + + self.output_path_button = QPushButton('Browse', self) + self.output_path_button.setGeometry(360, 110, 100, 30) + font = QFont('Arial', 9) + self.output_path_button.setFont(font) + self.output_path_button.setStyleSheet('color: white; background-color: #2a80ff; border-radius: 5px;') + self.output_path_button.clicked.connect(self.selectOutput) + + self.convert_button = QPushButton('Convert', self) + self.convert_button.setGeometry(200, 160, 100, 40) + font = QFont('Arial', 12) + self.convert_button.setFont(font) + self.convert_button.setStyleSheet('color: white; background-color: #2a80ff; border-radius: 5px;') + self.convert_button.clicked.connect(self.convertImages) + + self.info_label = QLabel('This program converts JPG and PNG images to WEBP format.', self) + self.info_label.setGeometry(10, 210, 480, 30) + font = QFont('Arial', 10) + self.info_label.setFont(font) + self.info_label.setStyleSheet('color: #050505;') + self.info_label.setAlignment(Qt.AlignCenter) + + self.designed_by_label = QLabel('Programmed by Mahdi Ziraki', self) + self.designed_by_label.setGeometry(10, 250, 200, 20) + font = QFont('Arial', 9) + self.designed_by_label.setFont(font) + self.designed_by_label.setStyleSheet('color: #d40000;') + self.designed_by_label.setAlignment(Qt.AlignLeft) + + self.show() + + def selectInput(self): + file_name, _ = QFileDialog.getOpenFileName(self, 'Select input file', '', 'All Files (*);;JPG Files (*.jpg);;PNG Files (*.png)', options=QFileDialog.Options()) + if file_name: + self.input_path = file_name + self.input_path_label.setText('Input file: ' + self.input_path) + + def selectOutput(self): + folder_name = QFileDialog.getExistingDirectory(self, 'Select output folder') + if folder_name: + self.output_path = folder_name + self.output_path_label.setText('Output folder: ' + self.output_path) + + def convertImages(self): + if os.path.isfile(self.input_path): + if self.input_path.endswith(('.jpg', '.png')): + image = Image.open(self.input_path) + new_file_name = os.path.splitext(os.path.basename(self.input_path))[0] + '.webp' + new_image_path = os.path.join(self.output_path, new_file_name) + image.save(new_image_path, 'webp') + else: + self.showError('Invalid input file format. Please select a file with JPG or PNG format.') + else: + for filename in os.listdir(self.input_path): + if filename.endswith(('.jpg', '.png')): + image_path = os.path.join(self.input_path, filename) + image = Image.open(image_path) + new_file_name = os.path.splitext(filename)[0] + '.webp' + new_image_path = os.path.join(self.output_path, new_file_name) + image.save(new_image_path, 'webp') + + # show completion message + msgBox = QMessageBox() + msgBox.setIcon(QMessageBox.Information) + msgBox.setText('Image conversion completed successfully.') + msgBox.setWindowTitle('Success') + msgBox.exec_() + + def showError(self, message): + msgBox = QMessageBox() + msgBox.setIcon(QMessageBox.Critical) + msgBox.setText(message) + msgBox.setWindowTitle('Error') + msgBox.exec_() + +if __name__ == '__main__': + app = QApplication([]) + converter = ImageConverter() + app.aboutToQuit.connect(converter.closeEvent) + app.exec_()