<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: justas</title>
    <description>The latest articles on DEV Community by justas (@justaspregot).</description>
    <link>https://dev.to/justaspregot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4110895%2Ffde8fb7a-08b8-4ecd-9d80-fffc6d4c47e6.jpeg</url>
      <title>DEV Community: justas</title>
      <link>https://dev.to/justaspregot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justaspregot"/>
    <language>en</language>
    <item>
      <title>Removing photo GPS data in the browser without recompressing the image</title>
      <dc:creator>justas</dc:creator>
      <pubDate>Sat, 05 Sep 2026 08:33:26 +0000</pubDate>
      <link>https://dev.to/justaspregot/removing-photo-gps-data-in-the-browser-without-recompressing-the-image-5b45</link>
      <guid>https://dev.to/justaspregot/removing-photo-gps-data-in-the-browser-without-recompressing-the-image-5b45</guid>
      <description>&lt;p&gt;A photo can contain more than the picture you see: camera details, timestamps, an orientation tag and sometimes GPS coordinates. Removing those details can be a file-container task rather than an image-processing task.&lt;/p&gt;

&lt;p&gt;I built an &lt;a href="https://quietutils.com/image-compressor/exif-remover/" rel="noopener noreferrer"&gt;EXIF remover in QuietUtils&lt;/a&gt; around that distinction. It handles JPEG, PNG and WebP locally in the browser, without an account or an image upload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stripping is not recompression
&lt;/h2&gt;

&lt;p&gt;Decoding an image, drawing it onto a canvas and exporting it again can remove metadata, but a JPEG export introduces another lossy encoding step. A container-level remover instead identifies metadata blocks and rebuilds the container while preserving the compressed image data. A smaller output can simply mean fewer metadata bytes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why JPEG parsing cannot stop at the first scan
&lt;/h2&gt;

&lt;p&gt;EXIF commonly lives in an APP1 marker segment. XMP can also use APP1, while ICC profiles can be split across APP2 segments. Multi-scan JPEGs can contain metadata between scans. Copying everything after the first start-of-scan marker would miss it. The parser must distinguish real markers from stuffed bytes and restart markers, and continue walking the file.&lt;/p&gt;

&lt;p&gt;PNG and WebP need their own chunk parsers and structural validation. Searching for and deleting a text string is not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserving image data has trade-offs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Orientation:&lt;/strong&gt; some phone photos store sideways pixels with an EXIF tag telling viewers to rotate them. Remove that tag without transforming the image and the cleaned photo may look sideways. This tool does not rotate and re-encode pixels to compensate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Colour:&lt;/strong&gt; the tool keeps ICC profiles by default for colour accuracy, with a checkbox to remove them. Custom profiles can contain descriptive metadata. Keeping one is a deliberate choice, not a promise that every metadata byte is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits and verification
&lt;/h2&gt;

&lt;p&gt;The processing runs inside the browser tab. You can inspect the Network panel while cleaning a non-sensitive test image to check the upload claim.&lt;/p&gt;

&lt;p&gt;HEIC and camera RAW are not supported. Removing metadata does not remove faces, addresses or other details visible in the picture.&lt;/p&gt;

&lt;p&gt;The existing automated checks use synthetic containers, including a known GPS value, to test stripping without private photos. They passed before publication. These checks are not an independent security audit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://quietutils.com/image-compressor/exif-remover/" rel="noopener noreferrer"&gt;Try the EXIF remover&lt;/a&gt;. Would your workflow favour preserving the compressed image data, or an optional re-encode to preserve displayed orientation?&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
  </channel>
</rss>
