php使用元数据,php – 读取文件的元数据

虽然我自己没有使用过这个,但是在sourceforge上的XMP PHP工具包听起来就像你可能正在寻找的那样:

http://xmpphptoolkit.sourceforge.net/据说 – 它是alpha版本,并且在一年多的时间里没有更新.

XMP Toolkit PHP Extension is a PHP module which includes the Adobe XMP

Toolkit SDK. This PHP5 extension will provide classes and methods to

manipulate XMP Metadatas from files like jpegs, tiff, png, but also

wav, mp3, avi, mpeg4, pdf, ai, eps… It’s based from the Adobe XMP

Toolkit SDK 4.4.2. The goal of this extension is to have php classes

which can open files, extract metadatas, manipulate them, and put them

back within few lines of php code. This project is under GPL v3

License.

您还可以使用iptcembed将任意元数据写入图像文件.正如您在评论中提到的,这仅适用于JPEG文件.

这是一个来自类的注释的脚本,它将获取和设置IPTC数据:

/************************************************************\

IPTC EASY 1.0 - IPTC data manipulator for JPEG images

All reserved www.image-host-script.com

Sep 15, 2008

\************************************************************/

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');

DEFINE('IPTC_CAPTION', '120');

DEFINE('IPTC_LOCAL_CAPTION', '121');

class iptc {

var $meta=Array();

var $hasmeta=false;

var $file=false;

function iptc($filename) {

$size = getimagesize($filename,$info);

$this->hasmeta = isset($info["APP13"]);

if($this->hasmeta)

$this->meta = iptcparse ($info["APP13"]);

$this->file = $filename;

}

function set($tag, $data) {

$this->meta ["2#$tag"]= Array( $data );

$this->hasmeta=true;

}

function get($tag) {

return isset($this->meta["2#$tag"]) ? $this->meta["2#$tag"][0] : false;

}

function dump() {

print_r($this->meta);

}

function binary() {

$iptc_new = '';

foreach (array_keys($this->meta) as $s) {

$tag = str_replace("2#", "", $s);

$iptc_new .= $this->iptc_maketag(2, $tag, $this->meta[$s][0]);

}

return $iptc_new;

}

function iptc_maketag($rec,$dat,$val) {

$len = strlen($val);

if ($len < 0x8000) {

return chr(0x1c).chr($rec).chr($dat).

chr($len >> 8).

chr($len & 0xff).

$val;

} else {

return chr(0x1c).chr($rec).chr($dat).

chr(0x80).chr(0x04).

chr(($len >> 24) & 0xff).

chr(($len >> 16) & 0xff).

chr(($len >> 8 ) & 0xff).

chr(($len ) & 0xff).

$val;

}

}

function write() {

if(!function_exists('iptcembed')) return false;

$mode = 0;

$content = iptcembed($this->binary(), $this->file, $mode);

$filename = $this->file;

@unlink($filename); #delete if exists

$fp = fopen($filename, "w");

fwrite($fp, $content);

fclose($fp);

}

#requires GD library installed

function removeAllTags() {

$this->hasmeta=false;

$this->meta=Array();

$img = imagecreatefromstring(implode(file($this->file)));

@unlink($this->file); #delete if exists

imagejpeg($img,$this->file,100);

}

};

?>

示例读取版权字符串:

$i = new iptc("test.jpg");

echo $i->get(IPTC_COPYRIGHT_STRING);

更新版权声明:

$i = new iptc("test.jpg");

echo $i->set(IPTC_COPYRIGHT_STRING,"Here goes the new data");

$i->write();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值