在php中编写exif数据
| 
                         我正在尝试创建一个网站,我可以在JPEG文件中添加和修改元数据. 有没有办法可以用相当简单的方式写出exif数据. 我看到一两个例子,但是他们太复杂了,不能在给定的时间内掌握. 我知道IPTC,我知道元数据可以添加到JPEG文件.但是,这样做的正确方法是什么呢? 如果有人可以提供一些帮助,如何使用EXIF或IPTC或任何其他图书馆或PHP功能添加元数据到JPEG,那么我将非常感激. 更新: 首先感谢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获取? 我回应了$rec和$value,但是我没有在屏幕上返回一个值. if(isset($info['APP13'])) 我不知道APP13是什么意思,当我尝试回显出$info时,当我在一个表中回显出$info时,我就会得到以下结果. '2#120' => 'Test image','2#116' => 'Copyright 2008-2009,The PHP Group'我知道你找到了解决方案,但这可能会帮助任何人寻找同样的事情! 我修改了一个我发现here的课(感谢debers). 并且所有对IPTC标签的引用都可以从PDF中读取 现在的代码(PHP> = 5.4): <?
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);
?>                        (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
