久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      淺談怎么利用PHP讀取到圖片的EXIF信息(附代碼)

      怎么利用PHP讀取到圖片的EXIF信息?下面本篇文章給大家介紹一下使用PHP獲取圖像文件的EXIF信息的方法,希望對大家有所幫助!

      淺談怎么利用PHP讀取到圖片的EXIF信息(附代碼)

      在我們拍的照片以及各類圖像文件中,其實(shí)還保存著一些信息是無法直觀看到的,比如手機(jī)拍照時(shí)會有的位置信息,圖片的類型、大小等,這些信息就稱為 EXIF 信息。一般 JPG 、 TIFF 這類的圖片文件都會有這樣的信息。EXIF 其實(shí)就是專門為這種數(shù)碼照片所定制的,專門用于記錄數(shù)碼照片的屬性信息和拍攝數(shù)據(jù)的,最初由日本制定。這個(gè)其實(shí)很好理解,日本對相機(jī)行業(yè)基本是壟斷般的存在,所以這類的標(biāo)準(zhǔn)當(dāng)然就是由他們制定啦!

      EXIF 在 Windows 系統(tǒng)中具有原生的支持,鼠標(biāo)右鍵點(diǎn)擊圖片打開菜單,然后點(diǎn)擊屬性并切換到詳細(xì)信息就可以直接看到圖片文件的 EXIF 信息了。由于這些信息是可以被隨意編輯的,所以它們可以作為一些參考,并不能作為某些功能屬性的確定值來獲取,比如寬高這些信息就不要完全相信 EXIF 中的。

      獲取 EXIF 中的圖片類型信息

      首先,我們看下通過 EXIF 來查看圖片的類型。

      var_dump(exif_imagetype($png)); // int(3) echo exif_imagetype($png) == IMAGETYPE_PNG ? $png . '是 PNG 圖片' : $png . '不是 PNG 圖片', PHP_EOL; // ../img/1.png是 PNG 圖片  var_dump(exif_imagetype($jpg)); // int(2) echo exif_imagetype($jpg) == IMAGETYPE_JPEG ? $jpg . '是 jpg 圖片' : $jpg . '不是 JPG 圖片', PHP_EOL; // ../img/2.jpg是 jpg 圖片

      直接使用 exif_imagetype() 函數(shù)就會返回一個(gè)圖片類型的常量,也就是以 IMAGETYPE_ 開頭的常量信息所代表的圖片類型。它還包括其它很多類型,這里只是演示了我們平常最常見的 jpg 和 png 類型的圖片類型的獲取。

      它和 getimagesize() 函數(shù)返回的第三個(gè)屬性,也就是下標(biāo)為 2 的那個(gè)屬性的內(nèi)容是一樣的,在 getimagesize() 函數(shù)中,0 和 1 代表的是寬高,2 代表的就是圖片的類型。

      var_dump(getimagesize($jpg)); // array(7) { //     [0]=> //     int(300) //     [1]=> //     int(244) //     [2]=> //     int(2) //     [3]=> //     string(24) "width="300" height="244"" //     ["bits"]=> //     int(8) //     ["channels"]=> //     int(3) //     ["mime"]=> //     string(10) "image/jpeg" //   }

      獲取完整的 EXIF 信息

      圖片中完整的所有 EXIF 信息是通過 exif_read_data() 函數(shù)來獲取的。

      var_dump(exif_read_data($png)); // PHP Warning:  exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP獲取圖像文件的EXIF信息.php on line 14  // Warning: exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP獲取圖像文件的EXIF信息.php on line 14  // bool(false)  var_dump(exif_read_data($jpg)); // array(8) { //     ["FileName"]=> //     string(5) "2.jpg" //     ["FileDateTime"]=> //     int(1605061174) //     ["FileSize"]=> //     int(19075) //     ["FileType"]=> //     int(2) // …… // ……

      就像前面講過的,EXIF 信息只在 JPG 、 TIFF 等類型的圖片格式中存在,所以 PNG 圖片是無法獲取到 EXIF 信息的。如果對 PNG 圖片使用 exif_read_data() 就會報(bào)出警告。而對于 JPG 來說,就會返回完整的全部的 EXIF 內(nèi)容。這里我們只截取了一部分,本身的內(nèi)容非常多,不只是寬、高、類型、壓縮比率之類的,如果是手機(jī)拍攝的還能看到手機(jī)廠商、地理位置、快門參數(shù)、光圈參數(shù)等,當(dāng)然,這個(gè)也和你使用的相機(jī)有很大的關(guān)系,有的廠家可能就會少一些數(shù)據(jù)。這個(gè)大家可以自己拍張照然后使用這個(gè)函數(shù)來自己查看一下。

      另外,還有一個(gè)別名函數(shù) read_exif_data() ,與 exif_read_data() 的功能是類似的,就是它的一個(gè)別名,并且在 PHP7 以后就已經(jīng)標(biāo)記為過時(shí)的語法了。大家可以了解一下。

      var_dump(read_exif_data($jpg)); // PHP Deprecated:  Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP獲取圖像文件的EXIF信息.php on line 17  // Deprecated: Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP獲取圖像文件的EXIF信息.php on line 17 // array(8) { //   ["FileName"]=> //   string(5) "2.jpg" //   ["FileDateTime"]=> //   int(1605061174) //   ["FileSize"]=> // …… // ……

      獲取指定索引的頭名稱

      索引頭對應(yīng)的就是 EXIF 中的字段名稱,我們可以查看當(dāng)前所有支持的索引頭信息,內(nèi)容非常多。也可以根據(jù)索引頭獲得屬性名稱,然后再到 EXIF 中查找對應(yīng)的屬性信息。

      echo "256: " . exif_tagname(256) . PHP_EOL; // 256: ImageWidth for ($id = 1; $id <= 65535; $id++) {     if (exif_tagname($id) != "") {         echo $id . ' ( ' . exif_tagname($id) . ' )', PHP_EOL;     } } // 11 ( ACDComment ) // 254 ( NewSubFile ) // 255 ( SubFile ) // 256 ( ImageWidth ) // 257 ( ImageLength ) // 258 ( BitsPerSample ) // 259 ( Compression ) // …… // …… // ……

      讀取 JPG 文件中嵌入的縮略圖

      可能很多人不知道吧,EXIF 中是可以保存一個(gè)縮略圖的。而且大家的手機(jī)拍出來的相片基本都會有這個(gè)縮略圖存在。Windows 系統(tǒng)中如果圖片有縮略圖的話也會直接用 EXIF 中的縮略圖,如果沒有的話,就會自動在目錄中生成一個(gè) Thumbs.db 文件,也就是一個(gè)縮略圖的數(shù)據(jù)庫。

      var_dump(exif_thumbnail('../img/3.jpeg'));  file_put_contents('../img/3-thumbnail.jpeg', exif_thumbnail('../img/3.jpeg'));

      在 PHP 中可以通過 exif_thumbnail() 這個(gè)函數(shù)直接獲取 JPG 文件中 EXIF 里面保存的縮略圖信息。在測試代碼中我們獲取到后再將它保存為正式的圖片,大家就可以看到縮略圖的真實(shí)樣子了。并且我們使用 exif_read_data() 來讀取這個(gè)文件的話,也能看到縮略圖保存的信息。

      var_dump(exif_read_data('../img/3.jpeg')); // array(56) { // …… // …… // …… //     ["Make"]=> //     string(6) "Xiaomi" //     ["THUMBNAIL"]=> //     array(9) { //       ["JPEGInterchangeFormat"]=> //       int(5504) //       ["Orientation"]=> //       int(6) //       ["JPEGInterchangeFormatLength"]=> //       int(14369) //       ["Compression"]=> //       int(6) //       ["ResolutionUnit"]=> //       int(2) //       ["XResolution"]=> //       string(4) "72/1" //       ["YResolution"]=> //       string(4) "72/1" //       ["ExifImageLength"]=> //       int(240) //       ["ExifImageWidth"]=> //       int(320) //     } //     ["UndefinedTag:0x9AAA"]=> //     string(4480) "1y?L?=w%?s_?&??v??oJ??$Gdz|d?9n? // …… // ……

      總結(jié)

      對于圖片的 EXIF 有了一個(gè)基本的了解了吧。今天學(xué)習(xí)的需要注意的幾點(diǎn)是:一是 EXIF 只有 JPG 、 TIFF 這類的圖片格式上才有,二是它們是可修改的,三是這玩意里面竟然還能保存一張縮略圖。果然,學(xué)習(xí)就是個(gè)無底洞,一不小心又開了眼界了。加油吧,少年們!

      測試代碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11.使用PHP獲取圖像文件的EXIF信息.php

      推薦學(xué)習(xí):《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號