How can I read and remove meta (exif) data from my photos using the command line?
Solution 1:
Install exiftool:
sudo apt-get install libimage-exiftool-perl
To read photo metadata:
exiftool /tmp/my_photo.jpg
To erase photo metadata:
exiftool -all= /tmp/my_photo.jpg
Before:
ExifTool Version Number : 8.60
File Name : my_photo.jpg
Directory : /tmp
File Size : 3.0 MB
File Modification Date/Time : 2013:02:24 12:08:10-08:00
File Permissions : rw-rw-r--
File Type : JPEG
MIME Type : image/jpeg
Exif Byte Order : Big-endian (Motorola, MM)
Orientation : Unknown (0)
Y Cb Cr Positioning : Centered
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Modify Date : 2013:02:24 11:25:27
Make : Samsung
Camera Model Name : Galaxy Nexus
Exif Version : 0220
Flashpix Version :
Color Space : sRGB
Components Configuration : Y, Cb, Cr, -
Compressed Bits Per Pixel : 0
Exif Image Width : 1944
Exif Image Height : 2592
Date/Time Original : 2013:02:24 11:25:27
Create Date : 2013:02:24 11:25:27
Exposure Time : 1/354
F Number : 2.8
Exposure Program : Aperture-priority AE
ISO : 50, 0, 0
Shutter Speed Value : 1/353
Aperture Value : 2.6
Brightness Value : 0
Exposure Compensation : 0
Max Aperture Value : 2.6
Subject Distance : 0 m
Metering Mode : Multi-spot
Light Source : Daylight
Flash : No Flash
Focal Length : 3.4 mm
Flash Energy : 0
Exposure Index : undef
Sensing Method : One-chip color area
Scene Type : Directly photographed
Custom Rendered : Custom
Exposure Mode : Auto
White Balance : Auto
Digital Zoom Ratio : 1
Scene Capture Type : Standard
Contrast : Normal
Saturation : Normal
Sharpness : Normal
Subject Distance Range : Unknown
Image Unique ID : OAEL01
GPS Time Stamp : 19:25:27
GPS Date Stamp : 2013:02:24
Compression : JPEG (old-style)
Thumbnail Offset : 2143
Thumbnail Length : 10941
Image Width : 1944
Image Height : 2592
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Aperture : 2.8
GPS Date/Time : 2013:02:24 19:25:27Z
Image Size : 1944x2592
Shutter Speed : 1/354
Thumbnail Image : (Binary data 10941 bytes, use -b option to extract)
Focal Length : 3.4 mm
Light Value : 12.4
After:
ExifTool Version Number : 8.60
File Name : my_photo.jpg
Directory : /tmp
File Size : 2.9 MB
File Modification Date/Time : 2013:02:24 12:21:39-08:00
File Permissions : rw-rw-r--
File Type : JPEG
MIME Type : image/jpeg
Image Width : 1944
Image Height : 2592
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 1944x2592
References:
- http://www.mattcutts.com/blog/howto-strip-jpeg-metadata/
- http://hacktux.com/read/remove/exif
- http://www.sno.phy.queensu.ca/~phil/exiftool/exiftool_pod.html
Solution 2:
Imagemagick
Instead of Exiftool, to handle Exif metadata (IPTC, XMP and ICC image metadata also) I found Imagemagick more useful and command easier to remember:
To read
identify -verbose image.jpg | grep exif
To remove
With imagemagick
package installed you can do this (not only for JPEGs):
mogrify -strip *.jpg # Optionally: -verbose
From manual:
-strip
strip the image of any profiles, comments or these PNG chunks: bKGD, cHRM, EXIF, gAMA, iCCP, iTXt, sRGB, tEXt, zCCP, zTXt, date.
AFAIK the only difference with exiftool is that mogrify
won't remove this metadata:
- JFIF Version
- Resolution Unit
- X Resolution
- Y Resolution
Which might be useful. Compared with diff -y <(exiftool wMogrify.jpg) <(exiftool wExiftool.jpg)
Remove EXIF data is not the same as anonymize: -strip
will recompress the image. This might be a good thing: The same software that take the photo (or other) could hide sensitive information (which may be encrypted) inside of ordinary image data (steganography). I'm not sure if the recompression will always remove everything (probably not). To avoid this recompresion you can use jpegtran:
jpegtran -copy none image.jpg > newimage.jpg
Also, to avoid losing color profile (ICC metadata, which causes richer colors[citation needed]):
convert image.jpg profile.icm && convert image.jpg -strip -profile profile.icm newimage.jpg
You might ask yourself if these costs are noticeable or relevant in your case.
Another tool about steganography on images is steghide.
Other tools and notes
-
mat2
(Metadata anonymisation toolkit v2): Removes metadata from a lot of formats (--list
). It's recommended by privacyguides.org. - Alternatives:
jhead
(only for JPEGs) and exiv2 (man; suggested on Wikipedia). - If you prefer Exiftool, you might find useful creating an alias to
exiftool -all= *.jpg && rm *original
, or with-overwrite_original
option. To remove only GPS data useexiftool -gps:all= -xmp:geotag= *.jpg
. Use an updated version: CVE-2021-22204. -
WebP format:
webp
package provideswebpmux
command, which manage XMP/EXIF metadata and ICC profile.
See also
- Harry Potter and the Digital Fingerprints | Electronic Frontier Foundation
- A Picture is Worth a Thousand Words, Including Your Location | Electronic Frontier Foundation
- #facebook is embedding tracking data inside photos you download
Solution 3:
To remove then change a single field we can use this command:
exiftool -Copyright= IMG_3357.jpg
exiftool -Copyright=LinuxSlaves IMG_3357.jpg
Reference
Solution 4:
I wish to add mat2
which support not only images. It's recommended by privacyguides.org (formerly known as privacytools.io) community.
MAT2 is free software, which allows the removal of metadata of image, audio, torrent, and document file types. It provides both a command line tool and a graphical user interface via an extension for Nautilus, the default file manager of GNOME.
and
mat2 is a metadata removal tool, supporting a wide range of commonly used file formats, written in python3: at its core, it's a library, used by an eponymous command-line interface, as well as several file manager extensions.
sudo apt install mat2
in-place purge of metadata
mat2 -s xxx.mp4
mat2 -s xxx.png