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
|