tft每日頭條

 > 科技

 > gd是什麼格式文件

gd是什麼格式文件

科技 更新时间:2024-07-01 16:06:17

gd是什麼格式文件?又到了一個大家非常熟悉的庫了,對于圖像圖形的處理來說,GD 庫是 PHPer 們繞不過去的一道坎從很早很早的 CMS 或者 Discuz 時代,各類開源軟件在安裝的時候就會明确地指出 GD 庫是它們必備的一個擴展當然,在現在的 PHP 版本中,相信大家也不會在編譯的時候忽略掉這個庫不管你是為圖片加水印、生成縮略圖還是制作驗證碼圖片,都離不開 GD 庫的身影,下面我們就來聊聊關于gd是什麼格式文件?接下來我們就一起去了解一下吧!

gd是什麼格式文件(手機打開gd文件方法)1

gd是什麼格式文件

又到了一個大家非常熟悉的庫了,對于圖像圖形的處理來說,GD 庫是 PHPer 們繞不過去的一道坎。從很早很早的 CMS 或者 Discuz 時代,各類開源軟件在安裝的時候就會明确地指出 GD 庫是它們必備的一個擴展。當然,在現在的 PHP 版本中,相信大家也不會在編譯的時候忽略掉這個庫。不管你是為圖片加水印、生成縮略圖還是制作驗證碼圖片,都離不開 GD 庫的身影。

當然,我們還是由淺入深地學習一些 GD 庫中的常用或好玩的函數。

當前環境中的 GD 庫信息

首先,我們可以查看下當前 PHP 環境中的 GD 庫版本及支持的圖片格式信息。

var_dump(gd_info());// array(13) {//     ["GD Version"]=>//     string(26) "bundled (2.1.0 compatible)"//     ["FreeType Support"]=>//     bool(true)//     ["FreeType Linkage"]=>//     string(13) "with freetype"//     [.jpg" Read Support"]=>//     bool(true)//     [.jpg" Create Support"]=>//     bool(true)//     [.jpg" Support"]=>//     bool(true)//     [.jpg" Support"]=>//     bool(true)//     [".jpg" Support"]=>//     bool(true)//     ["XPM Support"]=>//     bool(false)//     ["XBM Support"]=>//     bool(true)//     [.jpg" Support"]=>//     bool(true)//     [.jpg" Support"]=>//     bool(true)//     ["JIS-mapped Japanese Font Support"]=>//     bool(false)//   }

gd_info() 函數可以查看到當前 GD 庫的版本信息,其它字段就是各種圖片模式的支持情況,可以看到在我的系統環境中,除了 XPM 這種格式不支持外,其它各種圖片格式都是正常支持的。最後一個是日文字體的支持,我們當前環境中也是沒有的。

獲取圖片基本信息

getimagesize(),獲取圖片信息的這個函數,從名字上看是獲取圖片大小的一個函數但也包含一些其它的信息,而且這個函數其實和 GD 庫沒什麼太大的關系,也就是說不需要 GD 庫的擴展其實這個函數也是可以使用的。

var_dump(getimagesize("../img/1.jpg"));// array(6) {//     [0]=>//     int(150)//     [1]=>//     int(150)//     [2]=>//     int(3)//     [3]=>//     string(24) "width="150" height="150"//     ["bits"]=>//     int(8)//     ["mime"]=>//     string(9) "image.jpg"//   }

返回的結果其實非常簡單,0 和 1 分别就是圖片的寬高,2 是圖片的類型,之前的文章就講過它對應的就是 IMAGETYPE_ 常量中對應的圖片類型。3 是文字形式的圖片寬高,可以直接用于 img 标簽中,可以看出來,PHP 真的就是為了 web 而生的語言啊,連圖片大小獲取的函數都要帶個這樣的屬性回來。bits 就是圖片的 顔色比特位數 。mime 則是圖片的 MIME 類型了。

另外,getimagesize() 函數還有第二個參數,這是一個引用類型的參數,它将以一個關聯數組返回不同的.jpg" APP 标識。也就是說,它也是針對.jpg" 相關的圖片獲取一些額外的信息,其實就有點像上篇文章學習過的 EXIF 裡面的信息。

var_dump(getimagesize("../img/2.jpg", $info));// 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.jpg"//   }var_dump($info);// array(1) {//     ["APP0"]=>//     string(14) "JFIF��"//   }

此外,我們如果是.jpg" 圖片的話,還會多返回一個 channels 屬性,表示的是如果圖片是 RBG 格式的,返回的就是 3 ,如果是 CMYK 格式的,返回的就是 4 。

我們還可以使用 getimagesize() 獲得遠程文件的信息。

var_dump(getimagesize("http://upload-images.jianshu.io/upload_images/1074666-8df66a94d61cac74.jpg"?imageMogr2/auto-orient/strip|imageView2/2/w/374/format.jpg"));// array(6) {//     [0]=>//     int(374)//     [1]=>//     int(617)//     [2]=>//     int(18)//     [3]=>//     string(24) "width="374" height="617"//     ["bits"]=>//     int(8)//     ["mime"]=>//     string(10) "image.jpg"//   }

除了直接操作圖片文件之外,我們還可以直接從字符串中獲得圖片的信息。不過這些字符串一般也都是讀取到的圖片文件的二進制信息。你直接來一句真正的 Hello World 之類的字符串那打死它也解析不出來什麼圖片内容的。

$data = file_get_contents('../img/1.jpg"');var_dump(getimagesizefromstring($data));// array(6) {//     [0]=>//     int(150)//     [1]=>//     int(150)//     [2]=>//     int(3)//     [3]=>//     string(24) "width="150" height="150"//     ["bits"]=>//     int(8)//     ["mime"]=>//     string(9) "image.jpg"//   }

獲得圖片的一些信息

我們可以通過圖片的類型來獲取文件的擴展名,這個類型常量也是 IMAGETYPE_ 類型的。

var_dump(image_type_to_extension(IMAGETYPE.jpg")); // string(4) ".jpg"var_dump(image_type_to_extension(IMAGETYPE.jpg", FALSE)); // string(4) .jpg"

image_type_to_extension() 函數有第二個參數,如果設置為 false 的話,就不會加上那個 . 。

var_dump(image_type_to_mime_type(IMAGETYPE.jpg")); // string(9) "image.jpg"var_dump(image_type_to_mime_type(IMAGETYPE.jpg")); // string(10) "image.jpg"

同樣地,也有 image_type_to_mime_type() 這個函數來獲得圖片的 MIME 信息内容。另外,還有一個函數可以獲得當前系統中所支持的圖片類型都有哪些。

var_dump(imagetypes()); // int(111)

額,很奇怪吧,怎麼隻返回了一個 111 ?其實它是保存的二進制圖片支持信息,比如如果我們想知道當前系統中有沒有.jpg" 圖片的支持,就可以這樣使用:

var_dump(imagetypes() & IMAGETYPE.jpg"); // int(3)

和 IMAGETYPE.jpg" 與之後的結果就是 IMAGETYPE.jpg" 本身的值,這就說明當前系統中是支持這個圖片類型的操作的。

小例子:創建一張自己的圖片

最後,我們再來看一個小例子,其實就是利用 GD 庫中的這些函數來創建一張簡單的小圖片。

$im = @imagecreate(100, 50) or die("Cannot Initialize new GD image stream");$background_color = imagecolorallocate($im, 255, 255, 255);$text_color = imagecolorallocate($im, 233, 14, 91);imagestring($im, 1, 5, 5,  "Test 測試", $text_color);imag.jpg"($im, '../img/test.jpg"');imagedestroy($im);

其實每個函數的内容都很好理解,函數名就已經寫得很清楚了。當然,我們後面的文章中将詳細地再學習一次。這個最終生成的圖片中,中文也是亂碼的,不過它已經是可以當做一個圖片驗證碼來使用了,是不是非常地簡單?

總結

今天的内容不多,也都是比較基礎淺顯的一些函數的使用。當然,這隻是開頭的第一篇文章,GD 庫不是一個簡單的小擴展,它裡面的内容非常多,能夠實現的功能也非常複雜,不要走開,持續關注哦!

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved