parent
ae0dc72b16
commit
52edc99107
54
README.md
54
README.md
@ -29,6 +29,11 @@ The "left" directory contains the left half of the original image, and the "righ
|
||||
|
||||
## 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.
|
||||
2. Install the required Python packages using pip:
|
||||
|
||||
@ -37,14 +42,59 @@ pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 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
|
||||
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.
|
||||
|
||||
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
|
||||
This project is licensed under the terms of the MIT license.
|
||||
|
||||
|
66
main.py
66
main.py
@ -4,6 +4,30 @@ 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)
|
||||
@ -27,21 +51,45 @@ def split_image(image_path):
|
||||
os.makedirs(left_dir, exist_ok=True)
|
||||
os.makedirs(right_dir, exist_ok=True)
|
||||
|
||||
# Prepare the file paths for the split images
|
||||
base_filename, ext = os.path.splitext(os.path.basename(image_path))
|
||||
img1_path = os.path.join(left_dir, base_filename + "_left" + ext)
|
||||
img2_path = os.path.join(right_dir, base_filename + "_right" + ext)
|
||||
# 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(img1_path)
|
||||
img2.save(img2_path)
|
||||
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 into two halves")
|
||||
parser.add_argument("image_path", help="Path to the image file")
|
||||
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()
|
||||
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__":
|
||||
|
Loading…
x
Reference in New Issue
Block a user