No images found in the selected folderとでる。 windows環境で実行してる
Windows環境で「No images found in the selected folder」と表示される原因として、以下の点が考えられます:
- フォルダに画像ファイルが存在しない。
- 画像ファイルの拡張子がスクリプトでチェックしている拡張子に含まれていない。
- 画像ファイルの存在チェックがうまく動作していない。
まず、is_imageメソッドを修正して、ファイルの存在チェックが確実に行われるようにします。また、画像ファイルの拡張子をチェックする方法も改善します。
以下に修正されたスクリプトを示します:
スクリプト
python
import os
import zipfile
from tkinter import Tk, Label, Button, filedialog, messagebox
from PIL import Image
class ZipImagesApp:
def __init__(self, master):
self.master = master
master.title("Image Zipper")
self.label = Label(master, text="Select a folder to zip images")
self.label.pack(pady=10)
self.greet_button = Button(master, text="Select Folder", command=self.select_folder)
self.greet_button.pack(pady=5)
self.zip_button = Button(master, text="Zip Images", command=self.zip_images)
self.zip_button.pack(pady=5)
self.selected_folder = ""
def select_folder(self):
self.selected_folder = filedialog.askdirectory()
if self.selected_folder:
self.label.config(text=f"Selected folder: {self.selected_folder}")
else:
self.label.config(text="No folder selected")
def zip_images(self):
if not self.selected_folder:
messagebox.showerror("Error", "Please select a folder first")
return
images = [f for f in os.listdir(self.selected_folder) if os.path.isfile(os.path.join(self.selected_folder, f)) and self.is_image(os.path.join(self.selected_folder, f))]
if not images:
messagebox.showerror("Error", "No images found in the selected folder")
return
batch_size = 50
batch_number = 1
for i in range(0, len(images), batch_size):
batch_images = images[i:i + batch_size]
zip_filename = os.path.join(self.selected_folder, f'batch_{batch_number}.zip')
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
for image in batch_images:
zipf.write(os.path.join(self.selected_folder, image), image)
batch_number += 1
messagebox.showinfo("Success", "Images have been zipped successfully")
@staticmethod
def is_image(file_path):
try:
with Image.open(file_path) as img:
img.verify() # Check if it is an image
return True
except (IOError, SyntaxError):
return False
def main():
root = Tk()
app = ZipImagesApp(root)
root.mainloop()
if __name__ == "__main__":
main()
修正点
-
ファイルパスを完全なパスでチェック:
self.is_image(os.path.join(self.selected_folder, f))のようにファイルのフルパスを渡すように修正しました。
-
is_imageメソッドの修正:Image.open(file_path)でファイルが画像であるかどうかをチェックします。img.verify()を使用して、画像ファイルが有効かどうかを確認します。
実行方法
- スクリプトを
zip_images_app.pyという名前で保存します。 - コマンドラインやターミナルでスクリプトを実行します。
sh
python zip_images_app.py
- アプリケーションウィンドウが表示されるので、「Select Folder」ボタンをクリックして圧縮したい画像が入っているフォルダを選択し、「Zip Images」ボタンをクリックします。
これで、選択したフォルダ内の画像が50枚ずつ分割されてZIPファイルに圧縮されるはずです。各ZIPファイルはbatch_1.zip, batch_2.zipのように命名され、元のフォルダ内に保存されます。

ディスカッション
コメント一覧
まだ、コメントがありません