Update forensics/ela_hybrid.py
Browse files- forensics/ela_hybrid.py +20 -1
forensics/ela_hybrid.py
CHANGED
@@ -77,4 +77,23 @@ def generate_hybrid_ela_func(img_input):
|
|
77 |
# Generate ELA
|
78 |
hybrid_array = generate_ela_hybrid(img_input, quality=75, scale_factor=100)
|
79 |
visualizations = visualize_hybrid(hybrid_array)
|
80 |
-
return list(visualizations) # Returns [RGB PIL Image, ELA PIL Image]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
# Generate ELA
|
78 |
hybrid_array = generate_ela_hybrid(img_input, quality=75, scale_factor=100)
|
79 |
visualizations = visualize_hybrid(hybrid_array)
|
80 |
+
return list(visualizations) # Returns [RGB PIL Image, ELA PIL Image]
|
81 |
+
|
82 |
+
|
83 |
+
def generate_concatenated_hybrid(img_array):
|
84 |
+
"""
|
85 |
+
Concatenate original RGB and ELA map into a single image.
|
86 |
+
Returns a single PIL Image (side-by-side).
|
87 |
+
"""
|
88 |
+
# Extract RGB and ELA channels
|
89 |
+
original_rgb = Image.fromarray((img_array[:, :, :3] * 255).astype(np.uint8)) # 3 channels
|
90 |
+
ela_map = Image.fromarray((img_array[:, :, 3:] * 255).astype(np.uint8)) # 3 channels
|
91 |
+
|
92 |
+
# Resize to match height
|
93 |
+
ela_map = ela_map.resize(original_rgb.size)
|
94 |
+
|
95 |
+
# Concatenate and return as a single PIL Image
|
96 |
+
combined = Image.new("RGB", (ela_map.width + original_rgb.width, original_rgb.height)) # Single row
|
97 |
+
combined.paste(original_rgb, (0, 0))
|
98 |
+
combined.paste(ela_map, (original_rgb.width, 0))
|
99 |
+
return combined
|