php读取、擦除JPEG格式的图片里敏感的Exif信息

php安装exif插件

php如果想要读取exif信息,那么需要安装Exif插件。

首先phpinfo()打印以下,看看exif插件是否已经安装,有的php安装的时候默认安装,有的精简了就没有安装。

如果没有安装,那么可以按照以下步骤安装:

  • 打开php的源码包,进入php源码包路径/ext/exif。关于exif的源码就在此处
  • 执行命令/usr/local/php/bin/phpize。(具体路径根据你自己的php安装路径来确定)
  • ./configure --with-php-config=/usr/local/php/bin/php-config
  • make && make install
  • php.ini里面开启插件extension=exif.so

php读取exif信息

安装完exif插件之后,就可以调用相关api读取图片信息了

$exifinfo = exif_read_data($picPath);

注意:exif_read_data里面的参数,不能是一个网上的图片url

php里面可调用的exif函数很少,比如官网上只列举了几个:

  • exif_imagetype — 判断一个图像的类型
  • exif_read_data — 从 JPEG 或 TIFF 文件中读取 EXIF 头信息
  • exif_tagname — 获取指定索引的头名称
  • exif_thumbnail — 取得嵌入在 TIFF 或 JPEG 图像中的缩略图
  • read_exif_data — 别名 exif_read_data

如果想要擦除图片里面的exif信息,那么需要用别的办法。

php擦除exif信息

github上找到一个别人的库lsolesen/pel,它可以擦除exif信息。

不过它的demo都是命令行形式的,好在源码都在,拿来改一改可以放到自己的代码里。我把代码放到了线上,这是我的测试地址

不过使用lsolesen/pel擦除exif的时候,有个很trick的问题:

  • 使用lsolesen/pel这个库自己查看擦除后的信息,确实是被擦除了
  • 我拿别人的在线去除exif的工具试了一下,也是被擦除了
  • 但在Mac里面用Preview->showInspector看的时候,时间信息DateTimeOriginalDateTimeDigitized还是能看到╭(╯^╰)╮