iptcembed ITPCデータ取得と保存
PHP
//=================================================================
//
// IPTC タグを設定します
//
// iptcembed(iptc_data名 ,ファイル名,(int)Spoolフラグ)
//
// メタ・フィールドについて
// 参照:https://wpdocs.osdn.jp//関数リファレンス/wp_read_image_metadata
//
// 参考:https://www.php.net/manual/ja/function.iptcembed.php
// https://runebook.dev/ja/docs/php/function.iptcembed
//
(' , 2#+ IPTCのタグ数字')
DEFINE('IPTC_OBJECT_NAME', '005');
DEFINE('IPTC_EDIT_STATUS', '007');
DEFINE('IPTC_PRIORITY', '010');
DEFINE('IPTC_CATEGORY', '015');
DEFINE('IPTC_SUPPLEMENTAL_CATEGORY', '020');
DEFINE('IPTC_FIXTURE_IDENTIFIER', '022');
DEFINE('IPTC_KEYWORDS', '025');
DEFINE('IPTC_RELEASE_DATE', '030');
DEFINE('IPTC_RELEASE_TIME', '035');
DEFINE('IPTC_SPECIAL_INSTRUCTIONS', '040');
DEFINE('IPTC_REFERENCE_SERVICE', '045');
DEFINE('IPTC_REFERENCE_DATE', '047');
DEFINE('IPTC_REFERENCE_NUMBER', '050');
DEFINE('IPTC_CREATED_DATE', '055');
DEFINE('IPTC_CREATED_TIME', '060');
DEFINE('IPTC_ORIGINATING_PROGRAM', '065');
DEFINE('IPTC_PROGRAM_VERSION', '070');
DEFINE('IPTC_OBJECT_CYCLE', '075');
DEFINE('IPTC_BYLINE', '080');
DEFINE('IPTC_BYLINE_TITLE', '085');
DEFINE('IPTC_CITY', '090');
DEFINE('IPTC_PROVINCE_STATE', '095');
DEFINE('IPTC_COUNTRY_CODE', '100');
DEFINE('IPTC_COUNTRY', '101');
DEFINE('IPTC_ORIGINAL_TRANSMISSION_REFERENCE', '103');
DEFINE('IPTC_HEADLINE', '105');
DEFINE('IPTC_CREDIT', '110');
DEFINE('IPTC_SOURCE', '115');
DEFINE('IPTC_COPYRIGHT_STRING', '116'); →'2#116'
DEFINE('IPTC_CAPTION', '120');
DEFINE('IPTC_LOCAL_CAPTION', '121');
IPTCヘッダーデータの取得 配列(タブ名 => メタデータ)
PHP
$iptcHeaderArray = array
(
'2#005'=>'DocumentTitle',
'2#010'=>'Urgency',
'2#015'=>'Category',
'2#020'=>'Subcategories',
'2#040'=>'SpecialInstructions',
'2#055'=>'CreationDate',
'2#080'=>'AuthorByline',
'2#085'=>'AuthorTitle',
'2#090'=>'City',
'2#095'=>'State',
'2#101'=>'Country',
'2#103'=>'OTR',
'2#105'=>'Headline',
'2#110'=>'Source',
'2#115'=>'PhotoSource',
'2#116'=>'Copyright',
'2#120'=>'Caption',
'2#122'=>'CaptionWriter'
);
画像形式の確認
PHP
//=======================================================
//
// 画像ファイルのヘッダ部分を利用して画像フォーマットの判別
//-------------------------
// フォーマット: 先頭の文字
// JPEG: FF D8
// PNG: 89 50 4E 47
// GIF: 47 49 46 38
//=======================================================
function is_jpeg(&$pict)
{
return (bin2hex($pict[0]) == 'ff' && bin2hex($pict[1]) == 'd8');
}//
function is_png(&$pict)
{
return (bin2hex($pict[0]) == '89' && $pict[1] == 'P' && $pict[2] == 'N' && $pict[3] == 'G');
}
//end_function-----
IPTCバイナリデータへ変換
PHP
//=================================================================
//
// Thies C. Arntzen による iptc_make_tag() 関数
//
// バイナリデータに整形
//
//=================================================================
//定式---------
// Thies C. Arntzen による iptc_make_tag() 関数
//-------------
function iptc_make_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if ($length < 0x8000) { $retval .=chr($length>> 8) . chr($length & 0xFF);
} else {
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
} //end_function
IPTCメタデータへ変換、メタデータ保存
PHP
function IPTC_ImgMeta_INPUT()
{
$path = ""; //ファイルパス
$string = ""; //セットする文字列
// IPTC タグを設定します
$iptc = array(
//($tag => $string)
'2#120' => 'Test image',
'2#116' => 'Copyright 2008-2009, The PHP Group-Sample'
);
// IPTC タグをバイナリコードに変換
$data = '';
foreach ($iptc as $tag => $string) {
$tag = substr($tag, 2); //$tagの先頭2文字を取出し
$data .= iptc_make_tag(2, $tag, $string); //function処理
} //
// IPTC データを埋め込み(iptcembed(データ, ファイルパス)
$content = iptcembed($data, $path);
// 新しい画像データをファイルに書き込みます
$fp = fopen($path, "wb");
fwrite($fp, $content);
fclose($fp);
} //end_function
<?php
//テスト
?>