image-splitter/main.py

97 lines
2.9 KiB
Python

import argparse
import os
from PIL import Image
def prepare_file_paths(image_path):
# Get the parent directory of the original image
parent_directory = os.path.dirname(os.path.dirname(image_path))
# Prepare the file paths for the split images
base_filename, ext = os.path.splitext(os.path.basename(image_path))
left_image_path = os.path.join(
parent_directory, "left", base_filename + "_left" + ext
)
right_image_path = os.path.join(
parent_directory, "right", base_filename + "_right" + ext
)
return left_image_path, right_image_path
def is_image_split(image_path):
# Prepare the file paths for the split images using the function
left_image_path, right_image_path = prepare_file_paths(image_path)
# Check if the split images exist
return os.path.exists(left_image_path) and os.path.exists(right_image_path)
def split_image(image_path):
# Open the image file
img = Image.open(image_path)
# Get the image size
width, height = img.size
# Calculate the width of each split
split_width = width // 2
img1 = img.crop((0, 0, split_width, height))
img2 = img.crop((split_width, 0, width, height))
# Get the parent directory of the original image
parent_directory = os.path.dirname(os.path.dirname(image_path))
# Create a new directory to save the split images
left_dir = os.path.join(parent_directory, "left")
right_dir = os.path.join(parent_directory, "right")
# Create the directories if they don't exist
os.makedirs(left_dir, exist_ok=True)
os.makedirs(right_dir, exist_ok=True)
# Prepare the file paths for the split images using the function
left_image_path, right_image_path = prepare_file_paths(image_path)
# Save the split images
img1.save(left_image_path)
img2.save(right_image_path)
def split_images_in_directory(directory):
# Get the list of files in the directory
files = os.listdir(directory)
# Filter the list to get only the image files
image_files = [f for f in files if f.endswith(".jpg") or f.endswith(".png")]
# Split each image
for image_file in image_files:
image_path = os.path.join(directory, image_file)
if not is_image_split(image_path):
split_image(image_path)
def main():
parser = argparse.ArgumentParser(
description="Split an image or all images in a directory into two halves"
)
parser.add_argument("--image_path", help="Path to the image file")
parser.add_argument("--directory", help="Path to the directory containing images")
args = parser.parse_args()
if args.image_path:
if is_image_split(args.image_path):
print("The image is already split.")
else:
split_image(args.image_path)
elif args.directory:
split_images_in_directory(args.directory)
else:
print("Please provide either --image_path or --directory")
if __name__ == "__main__":
main()