Spaces:
Paused
Paused
| import argparse | |
| from PIL import Image | |
| from PIL.ImageOps import exif_transpose | |
| from tqdm import tqdm | |
| import os | |
| parser = argparse.ArgumentParser(description='Process some images.') | |
| parser.add_argument("input_folder", type=str, help="Path to folder containing images") | |
| args = parser.parse_args() | |
| img_types = ['.jpg', '.jpeg', '.png', '.webp'] | |
| # find all images in the input folder | |
| images = [] | |
| for root, _, files in os.walk(args.input_folder): | |
| for file in files: | |
| if file.lower().endswith(tuple(img_types)): | |
| images.append(os.path.join(root, file)) | |
| print(f"Found {len(images)} images") | |
| num_skipped = 0 | |
| num_repaired = 0 | |
| num_deleted = 0 | |
| pbar = tqdm(total=len(images), desc=f"Repaired {num_repaired} images", unit="image") | |
| for img_path in images: | |
| filename = os.path.basename(img_path) | |
| filename_no_ext, file_extension = os.path.splitext(filename) | |
| # if it is jpg, ignore | |
| if file_extension.lower() == '.jpg': | |
| num_skipped += 1 | |
| pbar.update(1) | |
| continue | |
| try: | |
| img = Image.open(img_path) | |
| except Exception as e: | |
| print(f"Error opening {img_path}: {e}") | |
| # delete it | |
| os.remove(img_path) | |
| num_deleted += 1 | |
| pbar.update(1) | |
| pbar.set_description(f"Repaired {num_repaired} images, Skipped {num_skipped}, Deleted {num_deleted}") | |
| continue | |
| try: | |
| img = exif_transpose(img) | |
| except Exception as e: | |
| print(f"Error rotating {img_path}: {e}") | |
| new_path = os.path.join(os.path.dirname(img_path), filename_no_ext + '.jpg') | |
| img = img.convert("RGB") | |
| img.save(new_path, quality=95) | |
| # remove the old file | |
| os.remove(img_path) | |
| num_repaired += 1 | |
| pbar.update(1) | |
| # update pbar | |
| pbar.set_description(f"Repaired {num_repaired} images, Skipped {num_skipped}, Deleted {num_deleted}") | |
| print("Done") |