Image EXIF Stripper
See what metadata your photos leak — GPS, camera serial, timestamps — then strip it all. JPEG, PNG, WebP. Browser-only, never uploaded.
Drop a JPEG / PNG / WebP image here, or click to choose a file.
All processing happens on this device. The image is not uploaded.
Metadata reading: exifr (MIT, lazy-loaded). Stripping uses native HTMLCanvasElement.toBlob — re-encoding through canvas drops every metadata field as a side effect. HEIC and animated GIFs are not supported in v1.
About this tool
Every photo your phone or camera takes carries embedded metadata. EXIF tags record the make and model of the camera, the lens (if it's an interchangeable-lens system), the date and time, the exposure settings, and — when GPS is enabled — the precise latitude and longitude where the photo was taken. IPTC and XMP fields can record the photographer's name, copyright statement, keywords, and editing history. ICC profiles describe the color space.
None of this is visible when the image renders. All of it is fully preserved when the image is uploaded to social media, sent in a message, or attached to an email. Most platforms strip metadata on upload (Twitter, Facebook, Instagram do; Reddit, Discord, GitHub generally don't). If you want a guarantee that the stripping happened, do it yourself before sharing.
Two-step UX: drop a file and you see a side-by-side comparison — left, every metadata field this image is currently leaking; right, what the file looks like after stripping (currently empty until you click). This is intentional. The point of the tool is not just to strip; it's to show you what was there to strip in the first place. Most people are surprised by the level of detail their photos quietly carry.
How the strip works. The browser loads your image
into an HTML <canvas> element, which decodes the
pixels and discards the file format wrapper (which is where metadata
lives). The canvas then re-exports via toBlob(),
producing a fresh JPEG / PNG / WebP file with only pixel data — no
EXIF, no IPTC, no XMP, no ICC, no thumbnail. There's no library
dependency for the strip step; just document.createElement
and the browser's built-in image codecs.
Quality. PNG is lossless; the pixels in the output
are bit-exact to the input. JPEG is lossy and gets re-encoded at
quality 0.92, which is visually indistinguishable from the typical
camera or phone output (which usually encodes at 0.85-0.95). WebP
uses the browser default. If you need pixel-perfect JPEG preservation
with metadata removal — e.g., for archival use — use
exiftool on the command line, which removes EXIF
surgically without re-encoding the pixel data.
Privacy. The image is never uploaded. Reading is via
FileReader; processing is via canvas; downloading is via
URL.createObjectURL. Open DevTools → Network and confirm
that dropping a file fires zero network requests beyond the initial
page load. The metadata-reading library (exifr) is
lazy-loaded on first file ingest and runs entirely in your browser.
Frequently asked questions
What metadata gets stripped?
All embedded metadata fields: GPS coordinates, camera make/model/serial, lens info, exposure settings, original capture timestamp, photo editor software trace, IPTC author/title fields, XMP keywords, ICC color profile (in some cases), and embedded thumbnails (which are themselves often un-stripped versions of the photo). The stripped output has zero metadata — verify by re-uploading the result, the metadata table will be empty.
How does the stripping work?
The image is loaded into an HTML <canvas> element. Canvas operates on raw pixel data only — it has no concept of metadata. When the canvas re-exports via toBlob(), the resulting file contains only pixels, encoded fresh. This is the simplest possible "filter" that removes metadata as a side effect, with no library dependency.
Is there quality loss?
PNG: zero quality loss (PNG is lossless and the pixels round-trip identically). JPEG: re-encoded at quality 0.92, which is visually indistinguishable from typical originals — most cameras encode at quality 0.85-0.95 themselves. WebP: re-encoded at the browser default. For most use cases the output is visually identical to the input. If you need bit-exact JPEG preservation, use a dedicated EXIF-only stripper like exiftool on the command line.
Why is the file size different after stripping?
Two reasons. First, removing metadata removes bytes. Second, the canvas re-encoder may use different compression parameters than the original encoder, so JPEG output size can shift in either direction by 10-30%. PNG re-encoding can also produce a different byte size despite identical pixels. The image content is intact; only the binary representation differs.
Why aren't HEIC files supported?
HEIC (the iPhone default format) needs a heavy WebAssembly decoder to render in browser canvas — currently around 500 KB. Adding it for v1 would dwarf the rest of the page. For now: convert HEIC to JPEG using your phone's share menu or a desktop tool, then strip the JPEG here.
Is the image uploaded to verify it stripped correctly?
No. The browser reads the file via FileReader, processes it via canvas, and offers it back as a Blob — all in your browser tab. No part of the file leaves your device. Open DevTools → Network and confirm: dropping a file fires zero network requests; the only requests on the page are the initial load.