Update app.py
Browse files
app.py
CHANGED
|
@@ -197,7 +197,7 @@ def scale_image_and_mask_together(image, mask, target_size=512):
|
|
| 197 |
|
| 198 |
print(f"📐 Gemeinsame Skalierung: {original_width}x{original_height} → {new_width}x{new_height} (Skalierung: {scale:.4f})")
|
| 199 |
|
| 200 |
-
# Skaliere Bild und Maske
|
| 201 |
scaled_image = image.resize((new_width, new_height), Image.Resampling.LANCZOS)
|
| 202 |
scaled_mask = mask.resize((new_width, new_height), Image.Resampling.NEAREST)
|
| 203 |
|
|
@@ -206,7 +206,8 @@ def scale_image_and_mask_together(image, mask, target_size=512):
|
|
| 206 |
padded_image = Image.new("RGB", (target_size, target_size), (0, 0, 0))
|
| 207 |
padded_mask = Image.new("L", (target_size, target_size), 0)
|
| 208 |
|
| 209 |
-
# Zentrierte Position berechnen
|
|
|
|
| 210 |
x_offset = (target_size - new_width) // 2
|
| 211 |
y_offset = (target_size - new_height) // 2
|
| 212 |
|
|
@@ -247,7 +248,7 @@ def composite_edited_region(original_image, inpaint_result, original_mask, paddi
|
|
| 247 |
"""
|
| 248 |
print(f"🎨 Starte korrektes Compositing...")
|
| 249 |
|
| 250 |
-
# 1. Extrahiere den bearbeiteten Bereich aus dem Inpaint-Ergebnis (ohne Padding)
|
| 251 |
x_offset = padding_info['x_offset']
|
| 252 |
y_offset = padding_info['y_offset']
|
| 253 |
scaled_width = padding_info['scaled_width']
|
|
@@ -260,7 +261,7 @@ def composite_edited_region(original_image, inpaint_result, original_mask, paddi
|
|
| 260 |
|
| 261 |
print(f" Bearbeiteter Bereich extrahiert: {unpainted_region.size}")
|
| 262 |
|
| 263 |
-
# 2. Skaliere den bearbeiteten Bereich zurück auf Originalgröße
|
| 264 |
original_size = (padding_info['original_width'], padding_info['original_height'])
|
| 265 |
edited_region_fullsize = unpainted_region.resize(original_size, Image.Resampling.LANCZOS)
|
| 266 |
|
|
@@ -268,6 +269,7 @@ def composite_edited_region(original_image, inpaint_result, original_mask, paddi
|
|
| 268 |
|
| 269 |
# 3. Erstelle eine weiche Maske für nahtloses Einfügen
|
| 270 |
# Erweitere die Originalmaske leicht für weiche Übergänge
|
|
|
|
| 271 |
soft_mask = original_mask.copy()
|
| 272 |
|
| 273 |
# Für weiche Kanten: Erweitere die Maske um 5 Pixel
|
|
|
|
| 197 |
|
| 198 |
print(f"📐 Gemeinsame Skalierung: {original_width}x{original_height} → {new_width}x{new_height} (Skalierung: {scale:.4f})")
|
| 199 |
|
| 200 |
+
# Skaliere Bild und Maske getrennt voneinander aber proportional
|
| 201 |
scaled_image = image.resize((new_width, new_height), Image.Resampling.LANCZOS)
|
| 202 |
scaled_mask = mask.resize((new_width, new_height), Image.Resampling.NEAREST)
|
| 203 |
|
|
|
|
| 206 |
padded_image = Image.new("RGB", (target_size, target_size), (0, 0, 0))
|
| 207 |
padded_mask = Image.new("L", (target_size, target_size), 0)
|
| 208 |
|
| 209 |
+
# Zentrierte Position berechnen
|
| 210 |
+
#um zu wissen, wo genau das herunterskalierte Originalbild auf das leere schwarze Bild legt werden muss, damit es perfekt mittig sitzt. Ohne diese Berechnung würde das Bild falsch (z.B. in der Ecke) platziert werden.
|
| 211 |
x_offset = (target_size - new_width) // 2
|
| 212 |
y_offset = (target_size - new_height) // 2
|
| 213 |
|
|
|
|
| 248 |
"""
|
| 249 |
print(f"🎨 Starte korrektes Compositing...")
|
| 250 |
|
| 251 |
+
# 1. Extrahiere den bearbeiteten Bereich (die Veränderung) aus dem Inpaint-Ergebnis (ohne Padding)
|
| 252 |
x_offset = padding_info['x_offset']
|
| 253 |
y_offset = padding_info['y_offset']
|
| 254 |
scaled_width = padding_info['scaled_width']
|
|
|
|
| 261 |
|
| 262 |
print(f" Bearbeiteter Bereich extrahiert: {unpainted_region.size}")
|
| 263 |
|
| 264 |
+
# 2. Skaliere den bearbeiteten Bereich zurück auf Originalgröße .resize() ist eine Python Funktion, aus der Pillow-Bibliothek die das skaliert.
|
| 265 |
original_size = (padding_info['original_width'], padding_info['original_height'])
|
| 266 |
edited_region_fullsize = unpainted_region.resize(original_size, Image.Resampling.LANCZOS)
|
| 267 |
|
|
|
|
| 269 |
|
| 270 |
# 3. Erstelle eine weiche Maske für nahtloses Einfügen
|
| 271 |
# Erweitere die Originalmaske leicht für weiche Übergänge
|
| 272 |
+
# Dieser gesamte Codeblock erzeugt weiche Übergänge, damit der bearbeitete Bereich nicht wie eine harte, ausgeschnittene "Collage" im Originalbild aussieht. Die Kombination aus MaxFilter (erweitert die Maske) und GaussianBlur (verwischt die Kante) erzeugt eine weiche Alpha-Maske für sanftes Alpha Blending.
|
| 273 |
soft_mask = original_mask.copy()
|
| 274 |
|
| 275 |
# Für weiche Kanten: Erweitere die Maske um 5 Pixel
|