書き込み - php exif_read_data




PHPでexifデータを書き込む (3)

私は、JPEGファイル内のメタデータを追加および変更できるWebサイトを作成しようとしています。

私はかなり簡単な方法でexifデータを書くことができる方法がありますか。

私は1つか2つの例を見ましたが、それらは私が与えられた時間枠を把握するには複雑過ぎます。

私はIPTCを知っていて、メタデータをJPEGファイルに追加できることを知っています。 しかし、これを行う正しい方法は何でしょうか。

EXIFやIPTC、その他のライブラリやPHPの機能を使ってJPEGにメタデータを追加する方法について誰かが何か手助けをすることができたら、私は大いに感謝します。

更新:

まずdbersdbersからの返信をdbersます。

コードを調べました。 JPGにデフォルトのタグを追加することができました。

コードのごく一部が何を意味するのかについて、私はまだ少し混乱しています。

例えば、php関数にexifデータを書く:

function iptc_make_tag($rec, $data, $value) 
{ 
    $length = strlen($value); 
    $retval = chr(0x1C) . chr($rec) . chr($data);
    ...
}

関数変数に遭遇したことはありません。また、 $rec$data 、および$valueが定義されていない場合、それらはどのように参照されますか。 またはそれらはiptc_make_tagからiptc_make_tagされiptc_make_tagか?

$rec$valueをエコーアウトしましたが、画面に値を戻すことはできません。

if(isset($info['APP13']))

APP13が何を意味するのかわからないので、 $infoをエコーアウトしようとすると、テーブル内で$infoをエコーアウトすると次のようになります。

'2#120' => 'Test image',
'2#116' => 'Copyright 2008-2009, The PHP Group'

ImagickではEXIFデータを設定できますが、ファイルをディスクに書き込むときにこれらのデータは単に無視されます。 最も一般的な解決策はexiftoolsにシェルアウトするか、PHPライブラリのpackagist.org/packages/lsolesen/pel使用することです。 PELのドキュメンテーションはまばらであり、そしてAPIもまた一目瞭然ではありません。

Facebookに360画像としてアップロードされる画像に正しいEXIFデータを追加しようとしたとき、私はこの問題に遭遇しました。それは特定のカメラメーカーとモデルがEXIFとして指定されることを必要とします。 以下のコードは画像ファイルを開き、その製造元とモデルを設定し、そしてディスクに保存します。 あなたが他のEXIFデータを設定しようとしているならば、ここのPELドキュメントでサポートされているすべてのPelTag定数の完全なリストがあります。

$data = new PelDataWindow(file_get_contents('IMAGE PATH'));
$tiff = null;
$file = null;

// If it is a JPEG-image, check if EXIF-headers exists
if (PelJpeg::isValid($data)) {
    $jpeg = $file = new PelJpeg();
    $jpeg->load($data);
    $exif = $jpeg->getExif();

    // If no EXIF in image, create it
    if($exif == null) {
        $exif = new PelExif();
        $jpeg->setExif($exif);

        $tiff = new PelTiff();
        $exif->setTiff($tiff);
    }
    else {
        $tiff = $exif->getTiff();
    }
}
// If it is a TIFF EXIF-headers will always be set
elseif (PelTiff::isValid($data)) {
    $tiff = $file = new PelTiff();
    $tiff->load($data);
}
else {
    throw new \Exception('Invalid image format');
}

// Get the first Ifd, where most common EXIF-tags reside
$ifd0 = $tiff->getIfd();

// If no Ifd info found, create it
if($ifd0 == null) {
    $ifd0 = new PelIfd(PelIfd::IFD0);
    $tiff->setIfd($ifd0);
}

// See if the MAKE-tag already exists in Ifd
$make = $ifd0->getEntry(PelTag::MAKE);

// Create MAKE-tag if not found, otherwise just change the value
if($make == null) {
    $make = new PelEntryAscii(PelTag::MAKE, 'RICOH');
    $ifd0->addEntry($make);
}
else {
    $make->setValue('RICOH');
}

// See if the MODEL-tag already exists in Ifd
$model = $ifd0->getEntry(PelTag::MODEL);

// Create MODEL-tag if not found, otherwise just change the value
if($model == null) {
    $model = new PelEntryAscii(PelTag::MODEL, 'RICOH THETA S');
    $ifd0->addEntry($model);
}
else {
    $model->setValue('RICOH THETA S');
}

// Save to disk
$file->saveFile('IMAGE.jpg');

たぶんあなたは試すことができます:

  • PEL(PHP Exifライブラリ) 。 PHPを使用してJPEGおよびTIFF画像のExifヘッダを読み書きするためのライブラリ。
  • PHP JPEGメタデータツールキット 。 以下のJPEGメタデータフォーマットの読み取り、書き込み、および表示を可能にします:EXIF 2.2、XMP / RDF、IPTC-NAA IIM 4.1電気ショック療法
  • ExifTool by perl 。 ExifToolは優秀です。 それは基本的にそれをすべて持っています - EXIF、IPTCとXMPサポート(読み書き)とメーカー拡張のサポート。

私はこれ自身経験がありませんが、phpのウェブサイトはあなたが探しているもののように見える何かを持っています:

here

それがあなたが「私が1つか2つの例を見たことがあるが、それらが私が与えられた時間枠で把握するには余りにも複雑である」と言ったときあなたが意味したものなら。

それからあなたはあなたの頭の上にいるかもしれません。

しかし、そのページの例は理解するのが難しいようには見えません。





exif