【问题标题】:Preserving metadata in resized image using PHP使用 PHP 在调整大小的图像中保留元数据
【发布时间】:2013-05-08 21:43:02
【问题描述】:

我有一个 PHP 脚本,它扫描目录中的图像,调整找到的任何图像的大小并将它们保存回来,覆盖原始图像。 除了从图像中去除元数据之外,它运行良好。

我找到了一个工具包,它可以操作元数据,包括提取元数据并将其写入图像。 在this page 上,它解释了如何执行此操作(在页面底部)。

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

以下是代码的相关部分:

这仅用于确认找到哪些图像并包含元数据 - 通过以 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();

这是将重写代码放在错误位置的情况 - 还是其他原因?

感谢您的任何建议。

【问题讨论】:

  • 您是否遗漏了一些代码?我看不到您在哪里创建/初始化变量“$exif_data”
  • bart,代码的第一部分包含 $exif_data 的创建部分 - 就在它打印之前。

标签: php metadata image-resizing


【解决方案1】:

我认为问题出在这里:

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

改为

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

希望它有效!

【讨论】:

  • AB - 引用的网站上的原始代码有 [put_jpeg_header_data( $filename, 'output.jpg', $jpeg_header_data );]。但这也不起作用,因为没有创建“output.jpg”。我想要做的是调整具有相同名称的原始图像的大小,然后添加回元数据。这就是我使用 $filename 两次的原因。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2013-08-20
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多