Image Load Lab - reproducible EXIF removal benchmark ===================================================== Purpose ------- Measure what changes when one EXIF APP1 segment is removed from a JPEG without re-encoding its compressed scan. Fixture ownership and privacy ----------------------------- The 1500x1000 RGB fixture is generated deterministically by the included Node.js script. It contains no third-party media and represents no real person, camera, device, or location. The inserted EXIF values are explicitly synthetic; there is no GPS record or real device serial. Method ------ 1. Generate the RGB fixture and encode it once as JPEG at quality 82 with MozJPEG and 4:2:0 chroma subsampling. 2. Generate one valid EXIF APP1 segment containing descriptive and capture-like synthetic fields. 3. Insert that segment after the JPEG SOI marker without changing the compressed image scan. 4. Produce the after file by deleting only EXIF APP1 segments. 5. Confirm the after file is byte-for-byte equal to the JPEG from step 1. 6. Decode both published JPEGs to RGB; compare SHA-256 hashes, every channel sample, maximum error, and MSE. Reproduce --------- Recorded environment: win32 Windows_NT x64; Node.js v24.19.0; Sharp 0.35.3; libvips 8.18.3; MozJPEG 0826579. Install compatible Node.js dependencies sharp and jszip, then run: node generate-exif-removal-benchmark.cjs ./out The script throws and exits non-zero if EXIF counts, byte equality, byte delta, decoded pixel hashes, or per-channel comparisons fail. Results for this run -------------------- Before: 199407 bytes; after: 198657 bytes; removed: 750 bytes (0.376115%). Decoded RGB SHA-256 for both: 016971e256042fd192c9e94d23b0fd237043b905d92a3a31bdd5b43a70e0bf9f. Changed RGB samples: 0; max channel difference: 0; MSE: 0. Files ----- ill-exif-benchmark-source.png - deterministic rendered source fixture ill-exif-benchmark-before-with-exif.jpg - JPEG with one EXIF APP1 segment ill-exif-benchmark-after-no-exif.jpg - the same JPEG scan data with EXIF removed ill-exif-benchmark-comparison.png - labeled side-by-side overview ill-exif-benchmark-comparison.webp - optimized 1500x760 WebP for the article embed ill-exif-benchmark-results.csv - machine-readable size, EXIF, hash, and pixel checks ill-exif-benchmark-record.json - full structured run record ill-exif-benchmark-verification.txt - concise verification text generate-exif-removal-benchmark.cjs - complete deterministic generator and verifier Limitations ----------- This is one synthetic JPEG and one controlled EXIF block. It does not test every phone, camera, editor, CMS, orientation workflow, ICC/XMP/IPTC block, or metadata-removal tool. Tools that decode and re-encode can change image pixels even when their visible purpose is metadata removal.