大多数图片都会包含 Exif(可交换图像文件格式)数据,其中包括一些关键数据,比如图片的拍摄日期、设备信息、拍摄地点等。
一般情况下,我们可以利用这些信息知道图片的原始数据,但某些情况下,也可能会泄露隐私。本文介绍下如何在 Linux 命令行中删除图片的 Exif 数据。
方法1:使用 ExitTool
ExitTool 提供了多个选项在不对图片进行压缩的情况下删除 Exif 数据。
首先需要对其安装。
Debian 系统:
sudo apt install libimage-exiftool-perl
基于RHEL的系统:
sudo dnf install perl-Image-ExifTool
基于Arch的系统:
sudo pacman -S perl-image-exiftool
ExifTool 可以用于查看与图片相关的元数据,可使用如下语法格式:
exiftool <image.jpg>

从图像中删除元数据
图像的元数据和 Exif 数据是有区别的。元数据包括文件的创建者、用途以及注释(如果有的话)等详细信息。
Exif 数据仅包括与图像相关的相关信息,比如尺寸、位置、用于创建或修改图片的软件等。
删除元数据的同时,也会将 exif 数据删除掉。
要删除元数据,需要使用 -all 选项。它将创建一个没有元数据的图像副本,原始文件将被重命名,并在文件末尾附加“_original”。
exiftool -all= <image.jpg>

现在我们再使用 exif 命令查看新文件的 exif 数据:

如上图所示,我已经成功地从图像中删除了exif数据,并且由于不涉及压缩,所以图片的大小并没有改变。
如果我们要删除元数据,但是不希望创建文件副本,只在原始图像上修改,该怎样做呢?可以使用 -overwrite_original 选项:
exiftool -overwrite_original -all= <image.jpg>

删除目录中所有图像的元数据
ExifTool 可以删除某个目录下所有图像的元数据,使用 -recurse 来实现,该选项会遍历子目录。
该操作会复制原始文件,并从文件副本中删除元数据;原始文件将会被重命名,在其末尾添加“_original”。
exiftool -recurse -all= <path of directory>

只删除 Exif 数据
如果只删除 exif 数据,需要使用 -EXIF 选项:
exiftool -EXIF= <image.jpg>
现在我们再来看一下图片信息:

方法2:使用 ImageMagick
与 ExitTool 不同,ImageMagick 不是仅仅用于处理图片元数据或 exit 数据的工具,因此它不会有太多的选项。
即便如此,使用 ImageMagick 依然能很好的完成去除 exit 数据的工作。
首先,ImageMagick 也需要安装。
在 Debian 系统中:
sudo apt-get install imagemagick
基于 RHEL 的系统:
sudo dnf install imagemagick
基于 Arch 的系统:
sudo pacman -S imagemagick
安装完成之后,就可以使用 ImageMagick 查看图像的详细信息了。要查看 exit 数据,可以使用如下语法结构:
identify -format '%[EXIF:*]' <image.jpeg>

要删除 exif 数据,可以在 mogrify 中使用 -strip 选项,如下所示:
mogrify -strip <image.jpeg>
删除 exif 数据后,我们再来使用上一个命令来检查一下,是否删除成功:
identify -format '%[EXIF:*]' <image.jpeg>

如上图所示,没有任何信息的输出,这表示 exif 数据已经被删除。
此外,也可以使用 ImageMagick 删除整个目录下所有图像的 exif 信息。但是与 ExifTool 不同,ImageMagick 只能用于当前目录下的图像文件,而不能指定路径。
要删除当前目录下所有图像的 exif 数据,可以使用如下命令:
mogrify -strip *
以上就是本次分享的在命令行删除图像 exif 数据的两种方式,欢迎讨论。