2015-11-16 52 views
0

我有我的攝影博客網站中的一些圖片添加水印的腳本。帶水印的文件被提供給瀏覽器並保持原始狀態不變。這部分工作正常。如何使用PEL將EXIF信息從一個文件複製到另一個文件?

最近我發現使用簡單的GD作爲水印是從原始文件EXIF數據剝離重要信息。我發現該解決方案使用的是PEL,所以我需要一些幫助來使用它。

我能弄清楚如何安裝PEL,但無法將其從$original_image複製到$new_image的EXIF數據。

$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"); 

的東西是,這是將圖像保存到文件中,目的不是保存任何圖像,而是僅將其提供給t他要求瀏覽器,像這樣:

$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

任何想法如何解決這個問題?

回答

0

OK,想通了,這裏是最後的和工作代碼:

$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(); 
0

快來看看你在做什麼這裏的密切關注:

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

你會創建一個名爲$jpeg新的圖像和應用的EXIF數據給它,但此時你用ImageJPEG()輸出$new_image。您需要致電PelJpeg::saveFile()才能保存所做的更改,然後提供該文件。

+0

你好,謝謝你的幫助。但之前有一個錯誤:可捕獲的致命錯誤:傳遞給lsolesen \ pel \ PelJpeg :: setExif()的參數1必須是lsolesen \ pel \ PelExif的實例,lsolesen \ pel \ PelIfd的實例,在/ var /第71行的www/html/clerigo/exif.php,以及304行的/var/www/html/clerigo/pel/src/PelJpeg.php中定義的。你能幫我弄清楚這一點嗎? – jaclerigo

相關問題