写真ブログ Web サイトの一部の写真に透かしを追加するスクリプトがあります。透かしが入ったファイルはブラウザーに提供され、元のファイルはそのまま残ります。この部分は正常に動作しています。
最近、透かしに単純に GD を使用すると、元のファイルである EXIF データから重要な情報が取り除かれていることがわかりました。ソリューションがPELを使用していることがわかったので、それを使用するための助けが必要です。
PEL のインストール方法は理解できましたが、EXIF データを から にコピーすることはできませんでし$original_image
た$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.
[編集] OK、これを次のように機能させることができました:
$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
これを解決する方法はありますか?