Pujan-Dev's picture
feat: updated detector using Ela fft and meta
0b8f50d
from PIL import Image, ImageChops, ImageEnhance
import io
def run_ela(image: Image.Image, quality: int = 90, threshold: int = 15) -> bool:
"""
Perform Error Level Analysis to detect image manipulation.
Parameters:
image (PIL.Image): Input image (should be RGB).
quality (int): JPEG compression quality for ELA.
threshold (int): Maximum pixel difference threshold to classify as edited.
Returns:
bool: True if image appears edited, False otherwise.
"""
# Recompress the image into JPEG format in memory
buffer = io.BytesIO()
image.save(buffer, format='JPEG', quality=quality)
buffer.seek(0)
recompressed = Image.open(buffer)
# Compute the pixel-wise difference
diff = ImageChops.difference(image, recompressed)
extrema = diff.getextrema()
max_diff = max([ex[1] for ex in extrema])
# Enhance difference image for debug (not returned)
_ = ImageEnhance.Brightness(diff).enhance(10)
return max_diff > threshold