我正在尝试创建一个网站,我可以在JPEG文件中添加和修改元数据.
有没有办法可以用相当简单的方式写出exif数据.
我看到一两个例子,但是他们太复杂了,不能在给定的时间内掌握.
我知道IPTC,我知道元数据可以添加到JPEG文件.但是,这样做的正确方法是什么呢?
如果有人可以提供一些帮助,如何使用EXIF或IPTC或任何其他图书馆或PHP功能添加元数据到JPEG,那么我将非常感激.
更新:
对于代码的一小部分意味着什么,我仍然有点困惑.
function iptc_make_tag($rec,$data,$value) { $length = strlen($value); $retval = chr(0x1C) . chr($rec) . chr($data); ... }
我没有碰到一个函数变量,如果没有定义,$rec,$data和$value被引用.还是从iptc_make_tag获取?
我回应了$rec和$value,但是我没有在屏幕上返回一个值.
if(isset($info['APP13']))
我不知道APP13是什么意思,当我尝试回显出$info时,当我在一个表中回显出$info时,我就会得到以下结果.
'2#120' => 'Test image','2#116' => 'Copyright 2008-2009,The PHP Group'
我知道你找到了解决方案,但这可能会帮助任何人寻找同样的事情!
<? 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 = []; var $file = null; function __construct($filename) { $info = null; $size = getimagesize($filename,$info); if(isset($info["APP13"])) $this->Meta = iptcparse($info["APP13"]); $this->file = $filename; } function getValue($tag) { return isset($this->Meta["2#$tag"]) ? $this->Meta["2#$tag"][0] : ""; } function setValue($tag,$data) { $this->Meta["2#$tag"] = [$data]; $this->write(); } private function write() { $mode = 0; $content = iptcembed($this->binary(),$this->file,$mode); $filename = $this->file; if(file_exists($this->file)) unlink($this->file); $fp = fopen($this->file,"w"); fwrite($fp,$content); fclose($fp); } private function binary() { $data = ""; foreach(array_keys($this->Meta) as $key) { $tag = str_replace("2#","",$key); $data .= $this->iptc_maketag(2,$tag,$this->Meta[$key][0]); } return $data; } function iptc_maketag($rec,$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; } function dump() { echo "<pre>"; print_r($this->Meta); echo "</pre>"; } #requires GD library installed function removeAllTags() { $this->Meta = []; $img = imagecreatefromstring(implode(file($this->file))); if(file_exists($this->file)) unlink($this->file); imagejpeg($img,100); } } $file = "photo.jpg"; $objIPTC = new IPTC($file); //set title $objIPTC->setValue(IPTC_HEADLINE,"A title for this picture"); //set description $objIPTC->setValue(IPTC_CAPTION,"Some words describing what can be seen in this picture."); echo $objIPTC->getValue(IPTC_HEADLINE); ?>