Spaces:
Running
Running
import os | |
from PIL import Image | |
def merge_images_vertically(input_dir, output_dir, max_size=10 * 1024 * 1024): | |
os.makedirs(output_dir,exist_ok=True) | |
filenames = sorted(os.listdir(input_dir), key=lambda x: int(x.split(".")[0])) | |
merged_image = None | |
merged_file_index = 0 | |
index = 0 | |
while True: | |
if index > (len(filenames)-1): break | |
file = filenames[index] | |
if not merged_image: | |
image = Image.open(os.path.join(input_dir, file)) | |
width, height = image.size | |
new_image = Image.new("RGB", (width, height)) | |
# Paste the two images onto the new image | |
new_image.paste(image, (0, 0)) | |
merged_image = new_image | |
index += 1 | |
else: | |
merged_width, merged_height = merged_image.size | |
merged_image.save(os.path.join(output_dir, "temp.png")) | |
file_size = os.stat(os.path.join(output_dir, "temp.png")).st_size | |
if file_size >= max_size: | |
output_path = os.path.join(output_dir, f"{merged_file_index}.png") | |
if os.path.exists(output_path): os.remove(output_path) | |
os.rename(os.path.join(output_dir, "temp.png"), output_path) | |
merged_image = None | |
merged_file_index += 1 | |
else: | |
image = Image.open(os.path.join(input_dir, file)) | |
width, height = image.size | |
# Create a new image with the combined width and the height of the tallest image | |
new_width = max(merged_width, width) | |
new_height = merged_height + height | |
new_image = Image.new("RGB", (new_width, new_height)) | |
# Paste the two images onto the new image | |
new_image.paste(merged_image, (0, 0)) | |
new_image.paste(image, (0, merged_height)) | |
merged_image = new_image | |
index += 1 | |
if merged_image: | |
temp_path = os.path.join(output_dir, "temp.png") | |
if os.path.exists(temp_path): os.remove(temp_path) | |
merged_image.save(os.path.join(output_dir, f"{merged_file_index}.png")) | |
def split_image_vertically(input_dir, output_dir): | |
os.makedirs(output_dir,exist_ok=True) | |
filenames = sorted(os.listdir(input_dir), key=lambda x: int(x.split(".")[0])) | |
file_index = 0 | |
for file in filenames: | |
cropped_height = 0 | |
while True: | |
merged_translated_image = Image.open(os.path.join(input_dir, file)) | |
max_width = merged_translated_image.width | |
max_height = merged_translated_image.height | |
height_to_crop = cropped_height + 1200 | |
if height_to_crop >= max_height: height_to_crop = max_height | |
cropped_image = merged_translated_image.crop((0, cropped_height, max_width, height_to_crop)) | |
cropped_image.save(os.path.join(output_dir, f"{file_index}.png")) | |
if height_to_crop < max_height: cropped_height = height_to_crop | |
else: break | |
file_index += 1 | |
if __name__ == "__main__": | |
input_dir = "media/manga-gu881388/334" | |
output_dir = "media/manga-gu881388/334-merged" | |
max_size = 10 * 1024 * 1024 # 10 MB | |
count = merge_images_vertically(input_dir, output_dir, max_size) | |
print(f"Merged {count} images.") | |
# if __name__ == "__main__": | |
# input_dir = "media/manga-gu881388/334-merged-translated" | |
# output_dir = "media/manga-gu881388/334-translated" | |
# split_image_vertically(input_dir, output_dir) |