Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用PEL将EXIF信息从一个文件复制到另一个文件?_Php_Exif_Pel - Fatal编程技术网

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

Php 如何使用PEL将EXIF信息从一个文件复制到另一个文件?,php,exif,pel,Php,Exif,Pel,我有一个脚本,在我的摄影博客网站的一些图片中添加了水印。带水印的文件被提供给浏览器,并保持原始文件不变。这部分工作正常 最近我发现,使用简单的GD作为水印会从原始文件EXIF数据中剥离重要信息。我发现这个解决方案正在使用,所以我需要一些使用它的帮助 我能够理解如何安装PEL,但无法让它将EXIF数据从$original_image复制到$new_image 这也会产生如下错误: $jpeg = new PelJpeg($original); $exif = $jpeg->getExif()

我有一个脚本,在我的摄影博客网站的一些图片中添加了水印。带水印的文件被提供给浏览器,并保持原始文件不变。这部分工作正常

最近我发现,使用简单的GD作为水印会从原始文件EXIF数据中剥离重要信息。我发现这个解决方案正在使用,所以我需要一些使用它的帮助

我能够理解如何安装PEL,但无法让它将EXIF数据从$original_image复制到$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);
可捕获的致命错误:传递给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中定义。你能帮我弄清楚这个吗?