Php 是否可以在图像中保存元数据?

Php 是否可以在图像中保存元数据?,php,image,metadata,exif,Php,Image,Metadata,Exif,我们在服务器上创建thumb图像,我正在寻找一种在该图像中保存元数据(文本)的方法。可能吗 此时,我们使用PHP并创建JPG图像。或重用旧的“数据隐藏”概念,(PDF)是的,这是可能的 您可以使用全能的Exiftool perl实用程序,它可以处理几乎所有已知的标记集,包括标准标记(EXIF、IPTC、Adobe的XMP等)和专有标记 我的答案是: 。一个库,用于使用PHP在JPEG和TIFF图像中读取和写入Exif头 。允许读取、写入和显示以下JPEG元数据格式:EXIF 2.2、XMP/R

我们在服务器上创建thumb图像,我正在寻找一种在该图像中保存元数据(文本)的方法。可能吗

此时,我们使用
PHP
并创建
JPG
图像。

或重用旧的“数据隐藏”概念,

(PDF)

是的,这是可能的


您可以使用全能的Exiftool perl实用程序,它可以处理几乎所有已知的标记集,包括标准标记(EXIF、IPTC、Adobe的XMP等)和专有标记

我的答案是:

  • 。一个库,用于使用PHP在JPEG和TIFF图像中读取和写入Exif头
  • 。允许读取、写入和显示以下JPEG元数据格式:EXIF 2.2、XMP/RDF、IPTC-NAA IIM 4.1等
  • 。ExifTool非常优秀。它基本上做到了这一切——EXIF、IPTC和XMP支持(读/写)以及对制造商扩展的支持
    • 我希望这对你有帮助

      我修改了我发现的一个类(谢谢)

      所有对IPTC标签的引用都可以从这里读取

      代码(PHP>=5.4):

      
      
      您认为人们应该如何回答这个问题?是\否?告诉我们文件格式将是一个好的开始。你说得对!更新了我的问题是的。没问题。但您的问题与此相同。您应该相信您的源代码,而不是声称这是您自己的脚本:我有一个问题,如何更新EXIF数据,例如,我有这个EXIF标记:0x9286,如何实现它?你能帮我吗?@SenTisso示例代码非常完整。您的问题到底是什么?例如,在这里您使用标签更新IPTC数据,例如
      2#120
      ,它的标题与您的答案相同,但我需要更新图像中的注释,图像中有EXIF标签()标签是
      0x9286
      ,我的问题是如何将其添加到那里,或者如何更新评论。因为您无法通过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");
      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, $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;            
          }   
      
          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, $this->file, 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);
      ?>