ImagickのsetPropertyで書き換えて、writeFileでファイルに出力すればよいかと思いましたが、やってみるとダメでした。setPropertyで書き換えた内容はファイルへの保存には反映しないようです。そこで、PHPでEXIFをいじるためのライブラリであるPELを導入しました。
バージョンが変わったからか、見つけたサイトの情報ではうまく動きませんでした。公式情報やサンプルを読んで使えるようになったので、まとめておきます。
インストール
公式で紹介されているpearを使う方法は、配信が止まっているからかうまくできませんでした。圧縮アーカイブをダウンロードして、パスを通して利用しました。
- DownloadのZIPなどをダウンロードして解凍しておきます。
- PELを利用するプロジェクトフォルダーにpelなどの名前でフォルダーを作成します。
- 作成したpelフォルダー内に、解凍したフォルダーにあるautoload.phpと、srcフォルダーをコピーします。
以下のような構成になります。
検索して出てきたサンプルや、公式サイトでもPelJpeg.phpをrequireすれば使えるような書き方ですが、0.9.2は沢山のPHPファイルを読み込む必要から、autoload.phpによって解決するようになっています。その際、autoload.phpと同じフォルダーに、srcフォルダーがあり、その中にPelの全てのPHPファイルが入っている必要があります。
サンプル
公式ページのサンプルを書き換えて、画像の幅と高さの表示を加えたものです。
<?php require_once "pel/autoload.php"; use lsolesen\pel\PelJpeg; use lsolesen\pel\PelTag; use lsolesen\pel\PelIfd; $jpeg = new PelJpeg("test.jpg"); $ifd0 = $jpeg->getExif()->getTiff()->getIfd(); $exif = $ifd0->getSubIfd(PelIfd::EXIF); echo "width=".$exif->getEntry(PelTag::PIXEL_X_DIMENSION)->getValue()."\n"; echo "height=".$exif->getEntry(PelTag::PIXEL_Y_DIMENSION)->getValue()."\n"; $entry = $ifd0->getEntry(PelTag::IMAGE_DESCRIPTION); $entry->setValue('Edited by PEL'); $jpeg->saveFile("out.jpg"); ?>
test.phpと同じフォルダーにあるtest.jpgを読み込んで、幅と高さをEXIFから読み込んで画面に表示します。その後、EXIFのコメントに「Edited by PEL」と書き込んで、out.jpgというファイル名で出力します。
php test.php などで実行して、出来上がったout.jpgの情報をみるとEXIFへの情報の書き込みが確認できます。macでは以下のようにします。
- out.jpgをダブルクリックしてプレビューで表示
- [command]+[i]で情報を表示
- (i)アイコンの詳細情報タブに切り替える
- [TIFF]をクリック
- [イメージの説明]欄に、Edited by PEL と表示されていれば、書き込み成功。
機能の追加
PELには各種機能があり、様々なクラスが用意されています。それらのクラスを利用する場合は、useを追加すると楽です。