import os from PIL import Image src_path = "/home/maxi/Projekt/wtc.waiswuaschd.de/app/static/img/chapters/source_chapters.jpg" out_dir = "/home/maxi/Projekt/wtc.waiswuaschd.de/app/static/img/chapters" im = Image.open(src_path).convert("RGBA") w, h = im.size def make_transparent(sub_img): sub_img = sub_img.convert("RGBA") data = sub_img.getdata() new_data = [] for item in data: r, g, b, a = item lum = 0.299 * r + 0.587 * g + 0.114 * b if lum >= 248: new_data.append((r, g, b, 0)) elif lum <= 200: new_data.append((r, g, b, 255)) else: alpha = int(255 * (248 - lum) / (248 - 200)) new_data.append((r, g, b, alpha)) res = Image.new("RGBA", sub_img.size) res.putdata(new_data) bbox = res.getbbox() if bbox: px1 = max(0, bbox[0] - 8) py1 = max(0, bbox[1] - 8) px2 = min(res.width, bbox[2] + 8) py2 = min(res.height, bbox[3] + 8) res = res.crop((px1, py1, px2, py2)) return res chapters_data = [] # 2. Traditionell & Basics sub2 = im.crop((25, 80, 308, 262)) for y in range(sub2.height): for x in range(sub2.width): actual_x = 25 + x actual_y = 80 + y if actual_x > 268 and actual_y > 165: sub2.putpixel((x, y), (255, 255, 255, 255)) chapters_data.append((2, "traditionell_basics", sub2)) # 3. Pasta & Nudelgerichte sub3 = im.crop((270, 20, 518, 270)) for y in range(sub3.height): for x in range(sub3.width): actual_x = 270 + x actual_y = 20 + y if actual_x < 308 and actual_y < 165: sub3.putpixel((x, y), (255, 255, 255, 255)) chapters_data.append((3, "pasta_nudelgerichte", sub3)) # 4. Kartoffeln sub4 = im.crop((515, 20, 745, 270)) chapters_data.append((4, "kartoffeln", sub4)) # 5. Reis & Getreide sub5 = im.crop((40, 315, 270, 505)) chapters_data.append((5, "reis_getreide", sub5)) # 6. Teig & Gebackenes sub6 = im.crop((270, 330, 520, 536)) chapters_data.append((6, "teig_gebackenes", sub6)) # 7. Asiatische Küche: bowl and chopsticks within [45, 580, 292, 725] sub7 = im.crop((45, 580, 292, 725)) chapters_data.append((7, "asiatische_kueche", sub7)) # 8. Süßspeisen: starts at y=568 (below label 6) sub8 = im.crop((460, 568, 750, 725)) chapters_data.append((8, "suessspeisen", sub8)) # 9. Desserts sub9 = im.crop((30, 765, 258, 938)) chapters_data.append((9, "desserts", sub9)) # 10. Kuchen & Gebäck sub10 = im.crop((265, 745, 510, 938)) chapters_data.append((10, "kuchen_gebaeck", sub10)) # 11. Plätzchen: starts at y=774 (below label 8 descender!) sub11 = im.crop((515, 774, 745, 938)) chapters_data.append((11, "plaetzchen", sub11)) for num, name, img in chapters_data: final_img = make_transparent(img) filename = f"chapter_{num}.png" filepath = os.path.join(out_dir, filename) final_img.save(filepath, "PNG") print(f"Saved Chapter {num:2d} ({name}) -> {filename} ({final_img.width}x{final_img.height})") print("All 10 chapters extracted with 100% purity!")