No images found in the selected folderとでる。 windows環境で実行してる

Windows環境で「No images found in the selected folder」と表示される原因として、以下の点が考えられます:

  1. フォルダに画像ファイルが存在しない。
  2. 画像ファイルの拡張子がスクリプトでチェックしている拡張子に含まれていない。
  3. 画像ファイルの存在チェックがうまく動作していない。

まず、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()

修正点

  1. ファイルパスを完全なパスでチェック:

    • self.is_image(os.path.join(self.selected_folder, f))のようにファイルのフルパスを渡すように修正しました。
  2. is_imageメソッドの修正:

    • Image.open(file_path)でファイルが画像であるかどうかをチェックします。
    • img.verify()を使用して、画像ファイルが有効かどうかを確認します。

実行方法

  1. スクリプトをzip_images_app.pyという名前で保存します。
  2. コマンドラインやターミナルでスクリプトを実行します。
sh
python zip_images_app.py
  1. アプリケーションウィンドウが表示されるので、「Select Folder」ボタンをクリックして圧縮したい画像が入っているフォルダを選択し、「Zip Images」ボタンをクリックします。

これで、選択したフォルダ内の画像が50枚ずつ分割されてZIPファイルに圧縮されるはずです。各ZIPファイルはbatch_1.zip, batch_2.zipのように命名され、元のフォルダ内に保存されます。

未分類

Posted by ぼっち