如何使用PEL将EXIF信息从一个文件复制到另一个文件?

时间:2015-11-16 12:55:21

标签: php exif pel

我的脚本在我的摄影博客网站上为某些图片添加了水印。带水印的文件将提供给浏览器并保持原始状态不变。这部分工作正常。

最近,我发现使用简单的GD作为水印正在从原始文件EXIF数据中删除重要信息。我发现该解决方案正在使用PEL,因此我需要一些帮助来使用它。

我能够弄清楚如何安装PEL,但却无法将EXIF数据从$new_image复制到$jpeg = new PelJpeg($original_image); $exif = $jpeg->getExif(); $tiff = $exif->getTiff(); $ifd0 = $tiff->getIfd(); $exif = $ifd0->getSubIfd(PelIfd::EXIF); $ifd1 = $ifd0->getNextIfd(); /* creates copy of $original_image to $new_image, adds watermark to $new_image */ $jpeg = new PelJpeg($new_image); $jpeg->setExif($exif); header("Content-Type: image/jpeg"); ImageJPEG($new_image);

Catchable fatal error: Argument 1 passed to lsolesen\pel\PelJpeg::setExif() must be an instance of lsolesen\pel\PelExif, instance of lsolesen\pel\PelIfd given, called in /var/www/html/clerigo/exif.php on line 71 and defined in /var/www/html/clerigo/pel/src/PelJpeg.php on line 304.

这也会产生如下错误:

$jpeg = new PelJpeg($original); $exif = $jpeg->getExif(); /* creates copy of $original_image to $new_image, adds watermark to $new_image */ $jpeg = new PelJpeg($new_image); $jpeg->setExif($exif); ImageJPEG($new_image, "new_image.jpg"); $jpeg->saveFile("/var/www/html/clerigo/new_image.jpg");

[编辑] 好的,设法使这个工作像这样:

$jpeg = new PelJpeg($new_image);
$jpeg->setExif($exif);
$jpeg->saveFile($new_image);
header("Content-Type: image/jpeg");
ImageJPEG($new_image);
imagedestroy($new_image);

问题是,这是将图像保存到文件中,目的不是保存任何图像,而是仅在请求时将其提供给浏览器,如下所示:

Warning: file_put_contents() expects parameter 1 to be a valid path, resource given in /var/www/html/clerigo/pel/src/PelJpeg.php on line 600

但是,这会导致错误: {{1}}

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

仔细看看你在这里做了什么:

$jpeg = new PelJpeg($new_image);
$jpeg->setExif($exif);
header("Content-Type: image/jpeg");
ImageJPEG($new_image);

您正在创建一个名为$jpeg的新图片并将EXIF数据应用于该图片,但随后您将$new_image输出ImageJPEG()。您需要拨打PelJpeg::saveFile()来保存您所做的更改,然后提供该文件。

答案 1 :(得分:0)

好的,想通了,这是最终的工作代码:

$jpeg = new PelJpeg($original_image);
$exif = $jpeg->getExif();

/*
creates copy of $original_image to $new_image, adds watermark to $new_image
*/

$jpeg = new PelJpeg($new_image);
$jpeg->setExif($exif);
header("Content-Type: image/jpeg");
echo $jpeg->getBytes();