使用PHP在调整大小的图像中保留元数据


Preserving metadata in resized image using PHP

我有一个PHP脚本,它扫描目录中的图像,调整它找到的图像的大小,并将它们保存回来,覆盖原始图像。除了它从图像中剥离元数据之外,它工作得很好。

我发现了一个工具包,可以操作元数据,包括提取和写入图像。在本页中,它解释了如何做到这一点(在页面的底部)。

所以我把它添加到我的代码,但我有问题-它不写元数据到调整大小的图像。我显然遗漏了一些东西,但似乎无法弄清楚是什么(可能是我缺乏编码技能),想知道是否有人可以发现我的错误并建议更正。

下面是代码的相关部分:

这只用于确认找到的图像是否包含元数据-通过以html格式打印它

echo " $file <br> " ;
        $filename = $file;
        $exif_data = get_EXIF_JPEG( $filename );
        echo Interpret_EXIF_to_HTML( get_EXIF_JPEG( $filename ), $filename );

这是代码,然后调整图像的大小并保存它,应该写入meatada到它-但不

$new_image = imagecreatetruecolor($new_width,$new_height);
        ImageCopyResized($new_image, $tmp_image,0,0,0,0, $new_width, $new_height, $width, $height);
        //Grab new image
        imagejpeg($new_image, $target_path);
        $image_buffer = ob_get_contents();
        ImageDestroy($new_image);
        ImageDestroy($tmp_image);
        echo " $file resized to $new_width x $new_height <br> 'n";
        echo str_pad('',4096)."'n";
        $jpeg_header_data = put_EXIF_JPEG( $exif_data, $jpeg_header_data );
        put_jpeg_header_data( $filename, $filename, $jpeg_header_data ); 
        ob_flush();
        flush();

这是把重写代码放在错误的地方的情况-或其他什么?

谢谢你的建议

我认为问题在这里:

put_jpeg_header_data($filename, $filename, $jpeg_header_data);

改为

put_jpeg_header_data($filename, $new/OUTPUT_image, $jpeg_header_data);

希望它能起作用!