Split Path of Images #1 (#2)

Reviewed-on: #2
This commit is contained in:
Andreas Fahrecker 2024-03-20 17:43:22 +01:00
parent ae0dc72b16
commit 52edc99107
2 changed files with 109 additions and 11 deletions

View File

@ -29,6 +29,11 @@ The "left" directory contains the left half of the original image, and the "righ
## Installation ## Installation
### For Usage as a Windows Executable
You can either download a prebuilt executable from the releases section of the repository, or you can build it yourself the building instructions are further down the `README.md`
### For Usage as a Python Script
1. Clone this repository. 1. Clone this repository.
2. Install the required Python packages using pip: 2. Install the required Python packages using pip:
@ -37,14 +42,59 @@ pip install -r requirements.txt
``` ```
## Usage ## Usage
Run the script with the path to the image you want to split as an argument:
### As Windows Executable
You can run the program with either the path to a single image you want to split or a directory containing multiple images.
#### Single Image Mode
```sh ```sh
python main.py path_to_your_image.jpg main.exe --image_path path_to_your_image.jpg
```
The program will create two new images in the "left" and "right" directories with the suffixes _left and _right added to the original file name.
#### Directory Mode
```sh
main.exe --directory path_to_your_directory
``` ```
The program will iterate over all images in the directory, and for each image, it will create two new images in the "left" and "right" directories with the suffixes _left and _right added to the original file name.
### As a Python Script
You can run the script with either the path to a single image you want to split or a directory containing multiple images.
To split a single image:
```sh
python main.py --image_path path_to_your_image.jpg
```
The script will create two new images in the "left" and "right" directories with the suffixes _left and _right added to the original file name. The script will create two new images in the "left" and "right" directories with the suffixes _left and _right added to the original file name.
To split all images in a directory:
```sh
python main.py --directory path_to_your_directory
```
The script will iterate over all images in the directory, and for each image, it will create two new images in the "left" and "right" directories with the suffixes _left and _right added to the original file name.
## Build from Source
### Windows Executable
1. Clone this repository.
2. Navigate into the cloned repository.
```sh
cd image-splitter
```
3. Install the required Python packages.
```sh
pip install -r requirements.txt
```
4. Build the Executable with PyInstaller
```sh
pyinstaller --onefile --name image-splitter main.py
```
## License ## License
This project is licensed under the terms of the MIT license. This project is licensed under the terms of the MIT license.

66
main.py
View File

@ -4,6 +4,30 @@ import os
from PIL import Image 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): def split_image(image_path):
# Open the image file # Open the image file
img = Image.open(image_path) img = Image.open(image_path)
@ -27,21 +51,45 @@ def split_image(image_path):
os.makedirs(left_dir, exist_ok=True) os.makedirs(left_dir, exist_ok=True)
os.makedirs(right_dir, exist_ok=True) os.makedirs(right_dir, exist_ok=True)
# Prepare the file paths for the split images # Prepare the file paths for the split images using the function
base_filename, ext = os.path.splitext(os.path.basename(image_path)) left_image_path, right_image_path = prepare_file_paths(image_path)
img1_path = os.path.join(left_dir, base_filename + "_left" + ext)
img2_path = os.path.join(right_dir, base_filename + "_right" + ext)
# Save the split images # Save the split images
img1.save(img1_path) img1.save(left_image_path)
img2.save(img2_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(): def main():
parser = argparse.ArgumentParser(description="Split an image into two halves") parser = argparse.ArgumentParser(
parser.add_argument("image_path", help="Path to the image file") 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() args = parser.parse_args()
split_image(args.image_path)
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__": if __name__ == "__main__":