File size: 5,526 Bytes
947c08e
 
 
cd23862
947c08e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cd23862
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
947c08e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import os
from PIL import Image

def merge_images_vertically_old(input_dir, output_dir, max_size=1800):
    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 merge_images_vertically(input_dir, output_dir, max_height=1800):
    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("RGBA", (width, height))
            
            # Paste the image onto the new image
            new_image.paste(image, (0, 0))
            merged_image = new_image
            index += 1
        else:
            merged_width, merged_height = merged_image.size
            
            if merged_height >= max_height:
                output_path = os.path.join(output_dir, f"{merged_file_index}.png")
                merged_image.save(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: 
        output_path = os.path.join(output_dir, f"{merged_file_index}.png")
        merged_image.save(output_path)


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)