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
|
## 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
66
main.py
@ -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__":
|
||||||
|
Loading…
x
Reference in New Issue
Block a user