Pixel Forensics

Load a photograph and lay maps over it that show traces the eye cannot see. Each map is arithmetic on the pixels. The maps show where the JPEG block grid sits, which quantisation table the pixels remember, how the noise is distributed, and whether a region was scaled. A line profile measures how far a faint feature rises above the noise along a line you draw. The tool measures and shows the scale. It does not decide what the measurement means.

  • The maps read only the last step of the compression history. They do not tell where the picture came from. A screenshot is a PNG with a JPEG history frozen in its pixels. A messenger recompresses each image and overwrites most of the earlier history. An empty map never proves that an image is untouched.
  • The most direct result needs no interpretation. The quantisation table in a JPEG header is either a scaled standard table or it is not. If it is, the tool reports the exact quality number. If it is not, the file did not come from an ordinary JPEG library at its last save.
  • The same table can also be estimated from the pixels alone. If the estimate contradicts the header, the pixels carry an earlier compression than the one the header describes.
  • The line profile averages across a width you choose. Noise falls with the square root of that width. The tool removes the background and reports each feature as a multiple of the local noise. Whether a bump at 3.2 times the noise means anything depends on your picture.
  • Everything runs in your browser. The image is never uploaded, and there is no server to upload it to.