CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

画像ファイルをフォルダーごとリサイズできるPythonソースコード

2024-01-23 04:36:53 | python
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リーダーを作ってみたい。
蔵衛門での写真管理で早く楽できるようにしたい!


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。