第一部分 GD庫(kù)介紹
PHP進(jìn)行圖像處理需要借助GD庫(kù)或者其他的類庫(kù)献雅,如ImageMagick(處理GIF管挟、PNG隔崎、JPEG今艺、WEBP)
知識(shí)點(diǎn):
- 常用的圖像處理函數(shù)
- 繪制圖像
- 項(xiàng)目中的運(yùn)用(常常用于創(chuàng)建縮略圖、創(chuàng)建水印爵卒、旋轉(zhuǎn)圖像虚缎、驗(yàn)證碼)
- 配合安裝GD庫(kù)
- 可以使用phpinfo看看有沒(méi)有安裝,沒(méi)有的話extension=php.gd.dll;配置文件開(kāi)啟GD庫(kù)钓株。
常見(jiàn)的圖片格式
jpeg格式在多次壓縮之后會(huì)降低質(zhì)量实牡,GIF不錯(cuò)但是色彩不行陌僵,PNG是不錯(cuò)的,WEBP運(yùn)用比較廣有前景创坞,它質(zhì)量好而且小碗短。
GD庫(kù)支持圖像格式及對(duì)應(yīng)版本:
WEBP格式不僅僅要GD版本和PHP版本達(dá)到要求,還要看看服務(wù)器是否支持WEBP圖像格式题涨。
可以使用gd_info()函數(shù)來(lái)檢測(cè)服務(wù)器支持的圖像格式偎谁,返回一個(gè)數(shù)組得到支持的圖片格式。
第二部分 圖像信息處理
1.獲取圖片的詳情信息getimagesize($image)
返回的是一個(gè)數(shù)組携栋。不僅僅可以獲得圖片的尺寸還可以獲得其他信息搭盾,單位是像素咳秉。
<?php
$image = '../image/a.jpg';
$info = getimagesize($image);
var_dump($info);
索引值對(duì)應(yīng)的返回:
0 -> 像素
1 -> 高度
2 -> 圖片格式1-GIF 2-JPEG 3-PNG
3 -> 是一個(gè)字符串詳細(xì)表明了寬度和高度
下面的只有對(duì)jpg的格式有效婉支。bits圖像的位數(shù) channels是3表明是RGB的圖像 mime是格式告訴瀏覽器這個(gè)是什么內(nèi)容常用的mimetype有jgp/txt/html/application/json/image告訴格式要渲染什么格式,這個(gè)屬性很有用澜建,要輸出圖像需要聲明這個(gè)mimetype否則會(huì)輸出二進(jìn)制的亂碼而不是圖片
也可以使用獲取文件的方式來(lái)得到剛才的信息:
<?php
$image = '../image/a.jpg';
$string = file_get_contents($image);
$info = getimagesizefromstring($string);
var_dump($info);
獲取圖像的文件后綴向挖,true的時(shí)候會(huì)帶上后綴的.,如果是false就直接輸出后綴
<?php
$image = '../image/a.jpg';
$string = file_get_contents($image);
$info = getimagesizefromstring($string);
$imageType = image_type_to_extension($info[2],false);
var_dump($imageType);
還可以獲取mime type
<?php
$image = '../image/a.jpg';
$string = file_get_contents($image);
$info = getimagesizefromstring($string);
$mime = image_type_to_mime_type($info[2]);
var_dump($mime);
直接獲取圖像的寬度和長(zhǎng)度:
注意imagesx()和imagesy()傳入的參數(shù)是資源類型而不是直接傳圖像炕舵。
<?php
$image = '../image/a.jpg';
$im = imagecreatefromjpeg($image);
echo sprintf('a.jpg 寬:%s何之,高:%s',imagesx($im),imagesy($im));
圖像資源很多,每次如何去判斷呢咽筋?這就要用到mime_type來(lái)調(diào)用不同的函數(shù)來(lái)創(chuàng)建圖像資源(這是代碼段):
/根據(jù)不同的圖像type來(lái)創(chuàng)建圖像
switch ($info[2]) {
case IMAGETYPE_GIF:
$im = imagecreatefromgif($image);
break;
case IMAGETYPE_JPEG:
$im = imagecreatefromjpeg($image);
break;
case IMAGETYPE_PNG:
$im = imagecreatefrompng($image);
break;
default:
echo '圖像格式不支持';
break;
}