PHP从客户端上传到服务器时会保留.jpg元数据

时间:2018-10-13 23:51:21

标签: php

方案:照片编辑人员在其客户端计算机上准备.jpg图像文件,包括在每个图像上指定IPTC元数据版权,描述和Byline值。然后必须通过基于PHP的图像上传网页将图像上传到服务器。问题:PHP上载过程中剥离了元数据! (注意:如果图像是通过FileZilla FTP上传的,则元数据将完整保存并可以通过PHP代码读取。)

我已经考虑过使用ImageMagick进程代替默认的GD库,但是在上传的图像上都没有显示元数据。我已经考虑过EXEC(ExifTool ...),但是它也有同样的问题-它只会查看已经剥离的图像的服务器副本。无法将元数据提取到客户端计算机上的隐藏表单字段中,然后再由PHP重新加入到图像文件中,因为(再次)PHP仅查看服务器端文件副本,并且元数据在到达时已被剥离。我也希望避免将图像作为Blob存储在MySQL数据库中。这就是为什么我首先要使用元数据的原因,因此Photo Manager可以离线进行所有图像准备,并将标题,版权和副标题信息封装在图像文件本身内,并希望它在图像内不受干扰。 (发现PHP认为它应该在没有任何资源的情况下上传图像时剥离元数据,我真是傻眼了!)

PHP是否可以使用PHP代码执行基于FTP的文件传输?我乐于接受这种或其他任何方式来获取文件的服务器副本,以将原始元数据包括在imageA的副本中。 TIA

PS-我尚未包括代码段,因为坦率地说,我还无法在该论坛中弄清楚该怎么做!

问题解决方案:使用HTML FORM标记上传文件依赖于特殊的输入类型“文件”。使用此功能时,会发生各种神奇的事情,包括将文件立即上传到服务器到/ tmp /目录中的临时文件。我最初以为是在从客户端到服务器的此上载期间删除了元数据。不是-我能够验证上传的临时文件仍然包含元数据。

我的问题是我将临时文件放入最终文件夹后的处理方式。任何以任何方式修改文件的过程(GD图像扩展名)都会立即剥离元数据。这符合元数据标准,因为修改后的图像不再是原始图像,并且原始图像的许多元数据将不再准确!调用move_uploaded_image()函数时无需更改图像,而是将完整的临时图像完整地复制到了最终目的地。

很明显,如果您需要php在将图像发送到最终目的地之前对其进行按摩,则它不会保留元数据。就我而言,所有此类按摩都是在上传之前由照片编辑器完成的。

1 个答案:

答案 0 :(得分:0)

自己在等待其他人称量时自己弄清楚了。有关详细信息,请参阅末尾我原始帖子的“问题解决方案”部分。感谢所有看过我的问题的人!