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



>场景:照片编辑人员在其客户端计算机上准备.jpg图像文件,包括指定每个图像上的IPTC元数据版权,描述和署名值。 然后,必须通过基于 PHP 的图像上传网页将图像上传到服务器。 问题:PHP 进程在上传过程中剥离元数据!(注意:如果图像是通过FileZilla FTP上传的,则元数据将完好无损地到达,并且可以由PHP代码读取。

我考虑过使用 ImageMagick 进程而不是默认的 GD 库,但两者都在上传的图像上不显示元数据。 我考虑过EXEC(ExifTool...(,但它有同样的问题 - 它只会查看服务器已经剥离的图像副本。元数据无法提取到客户端计算机上的隐藏表单字段中,然后由 PHP 重新加入到图像文件中,因为(再次(PHP 只查看服务器端文件副本,并且元数据在到达时已被剥离。 我还希望避免将图像作为 blob 存储在 MySQL 数据库中。 这就是为什么我首先尝试使用元数据,因此照片管理器可以离线完成所有图像准备,并将标题、版权和署名信息封装在图像文件本身中,并期望它在图像中不受干扰地传播。 (我非常惊讶地发现 PHP 假设它应该在图像上传期间剥离元数据而没有追索权!

PHP有没有办法使用PHP代码执行基于FTP的文件传输? 我对这种或任何其他方法持开放态度,以使文件的服务器副本将原始元数据包含在图像A的副本中。 蒂亚

PS - 我没有包含代码片段,因为坦率地说,我还没有能够在这个论坛中弄清楚如何做到这一点 - 还没有!

问题解决方案:使用 HTML 表单标记上传的文件依赖于特殊的输入类型"file"。 当使用它时,会发生各种神奇的事情,包括立即将文件上传到服务器到/tmp/目录中的临时文件。 我最初认为正是在从客户端到服务器的上传过程中,元数据被剥离了。 它不是 - 我能够验证上传的临时文件是否仍然包含元数据。

我的问题是我对临时文件做了什么,将其放入其最终文件夹中。 以任何方式修改文件的任何进程(GD 图像扩展名(都会立即剥离元数据。 这符合元数据标准,因为修改后的图像不再是原始图像,并且原始图像的大部分元数据将不再准确! 调用 move_uploaded_image(( 函数而不事先更改映像,将临时映像完全完整地复制到其最终目的地。

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

自己在等待别人权衡时想通了。 有关详细信息,请参阅我原始帖子末尾的问题解决方案部分。 感谢所有看过我问题的人!

最新更新