Home / Tools / Exif

Exif viewer and remover

Photographs carry more than pixels. Open one and see what it is telling people, then save a copy with that removed.

Nothing is uploaded. The file is read inside your browser, which for this particular tool rather matters.

What Exif holds

Most cameras and phones record the make and model, the date and time, the exposure settings, the software that last touched the file, and often the orientation. Phones with location services on also record latitude and longitude, accurate to a few metres.

That last one is the reason this tool exists. A photograph posted from home, with GPS intact, tells strangers where you live.

Reading it in Pillow

from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS

im = Image.open("photo.jpg")
exif = im.getexif()

for tag, value in exif.items():
    print(TAGS.get(tag, tag), "=", value)

gps = exif.get_ifd(0x8825)
for tag, value in gps.items():
    print(GPSTAGS.get(tag, tag), "=", value)

Removing it in Pillow

from PIL import Image

im = Image.open("photo.jpg")
clean = Image.new(im.mode, im.size)
clean.putdata(list(im.getdata()))
clean.save("clean.jpg", quality=92)

Copying the pixels into a new image is the reliable way. Saving without passing exif= is usually enough, but building a fresh image leaves nothing behind at all.

Keep the orientation

Stripping Exif also removes the orientation tag, which can leave a photo sideways. Apply the rotation to the pixels before you strip:

from PIL import Image, ImageOps

im = ImageOps.exif_transpose(Image.open("photo.jpg"))

This tool does that for you, because the browser applies orientation when it draws the image.

What this tool reads

It parses the Exif block of JPEG files directly, including the camera sub directory and the GPS sub directory. PNG and WEBP usually carry no Exif at all, and many apps strip it when exporting, so an empty result is common and not a fault.