import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QFileDialog, QVBoxLayout, QWidget, QLineEdit
from PyQt5.QtCore import Qt
from PIL import Image
class ImageResizerApp(QMainWindow):
def __init__(self):
super().__init__()
self.folder_path = ""
self.target_size = (0, 0)
self.init_ui()
def init_ui(self):
self.setWindowTitle("画像リサイズプログラム")
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
layout = QVBoxLayout()
self.label = QLabel("1. フォルダを選択してください", self)
self.label.setAlignment(Qt.AlignCenter)
layout.addWidget(self.label)
self.select_button = QPushButton("フォルダを選択", self)
self.select_button.clicked.connect(self.choose_folder)
layout.addWidget(self.select_button)
self.label_size = QLabel("2. 新しいサイズを入力してください (幅 x 高さ):", self)
self.label_size.setAlignment(Qt.AlignCenter)
layout.addWidget(self.label_size)
size_layout = QVBoxLayout()
self.width_entry = QLineEdit(self)
self.width_entry.setPlaceholderText("幅")
size_layout.addWidget(self.width_entry)
self.height_entry = QLineEdit(self)
self.height_entry.setPlaceholderText("高さ")
size_layout.addWidget(self.height_entry)
layout.addLayout(size_layout)
self.resize_button = QPushButton("リサイズ", self)
self.resize_button.clicked.connect(self.resize_images)
layout.addWidget(self.resize_button)
central_widget.setLayout(layout)
def choose_folder(self):
folder_path = QFileDialog.getExistingDirectory(self, "フォルダを選択", "", QFileDialog.ShowDirsOnly)
if folder_path:
self.folder_path = folder_path
self.label.setText(f"1. 選択されたフォルダ: {folder_path}")
def resize_images(self):
if not self.folder_path:
self.label.setText("エラー: フォルダが選択されていません")
return
width_text = self.width_entry.text()
height_text = self.height_entry.text()
if not width_text or not height_text:
self.label.setText("エラー: サイズが指定されていません")
return
try:
new_width = int(width_text)
new_height = int(height_text)
self.target_size = (new_width, new_height)
except ValueError:
self.label.setText("エラー: 正しい数値を入力してください")
return
image_extensions = ['.png', '.jpg', '.jpeg', '.gif']
for root, dirs, files in os.walk(self.folder_path):
for file in files:
if file.lower().endswith(tuple(image_extensions)):
image_path = os.path.join(root, file)
try:
original_image = Image.open(image_path)
resized_image = original_image.resize(self.target_size, Image.ANTIALIAS)
resized_image.save(image_path)
except Exception as e:
print(f"エラー: {e}")
self.label.setText(f"3. 画像をリサイズしました。")
if __name__ == "__main__":
app = QApplication(sys.argv)
image_resizer_app = ImageResizerApp()
image_resizer_app.show()
sys.exit(app.exec_())
結果はPCで成功!
上司が運転する車内でSDカード内のフォルダーごと試してみたら、固まりながらも見事にリサイズできてしまった。
ドラッグ&ドロップ方式ではどうしても上手く動かなかったので、フォルダーごとリサイズに変更した。
次はAI OCRリーダーを作ってみたい。
蔵衛門での写真管理で早く楽できるようにしたい!