Php 如何使用PEL将EXIF信息从一个文件复制到另一个文件?
我有一个脚本,在我的摄影博客网站的一些图片中添加了水印。带水印的文件被提供给浏览器,并保持原始文件不变。这部分工作正常 最近我发现,使用简单的GD作为水印会从原始文件EXIF数据中剥离重要信息。我发现这个解决方案正在使用,所以我需要一些使用它的帮助 我能够理解如何安装PEL,但无法让它将EXIF数据从$original_image复制到$new_image 这也会产生如下错误:Php 如何使用PEL将EXIF信息从一个文件复制到另一个文件?,php,exif,pel,Php,Exif,Pel,我有一个脚本,在我的摄影博客网站的一些图片中添加了水印。带水印的文件被提供给浏览器,并保持原始文件不变。这部分工作正常 最近我发现,使用简单的GD作为水印会从原始文件EXIF数据中剥离重要信息。我发现这个解决方案正在使用,所以我需要一些使用它的帮助 我能够理解如何安装PEL,但无法让它将EXIF数据从$original_image复制到$new_image 这也会产生如下错误: $jpeg = new PelJpeg($original); $exif = $jpeg->getExif()
$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);
可捕获的致命错误:传递给lsolesen\pel\PelJpeg::setExif的参数1必须是lsolesen\pel\PelExif的实例,lsolesen\pel\PelIfd的实例,在第71行的/var/www/html/clerigo/exif.php中调用,在第304行的/var/www/html/clerigo/pel/src/PelJpeg.php中定义
[编辑]
好的,我设法做到了这一点:
$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);
问题是,这是将图像保存到文件中,目的不是保存任何图像,而是根据请求仅向浏览器提供图像,如下所示:
$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);
但是,这会导致一个错误:
警告:文件内容要求参数1为有效路径,资源在第600行的/var/www/html/clerigo/pel/src/PelJpeg.php中给出
有什么办法解决这个问题吗?仔细看看你在做什么:
$jpeg = new PelJpeg($new_image);
$jpeg->setExif($exif);
header("Content-Type: image/jpeg");
ImageJPEG($new_image);
您正在创建一个名为$jpeg的新图像,并将EXIF数据应用于该图像,但随后您将使用ImageJPEG输出$new_图像。您需要调用PelJpeg::saveFile来保存所做的更改,然后提供该文件。好的,算出了,下面是最终的工作代码:
$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();
嗨,谢谢你的帮助。但之前有一个错误:可捕获致命错误:传递给lsolesen\pel\PelJpeg::setExif的参数1必须是lsolesen\pel\PelExif的实例,lsolesen\pel\PelIfd的实例,在第71行的/var/www/html/clerigo/exif.php中调用,在第304行的/var/www/html/clerigo/pel/src/PelJpeg.php中定义。你能帮我弄清楚这个吗?