首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 獲取圖片信息完整指南:getimagesize、pathinfo、EXIF 與自定義封裝函數

     編輯:PHP 綜合知識

在處理圖片上傳、縮圖生成、格式驗證等場景時,準確獲取圖片屬性是基礎。本文系統梳理 PHP 核心函數 getimagesize()、pathinfo()、exif_imagetype() 的用法差異,並提供開箱即用的封裝函數。

核心函數:getimagesize() —— 尺寸、類型、屬性一網打盡

支援格式:GIF、JPG、PNG、SWF、PSD、TIFF、BMP、IFF、JP2、JPX、JB2、JPC、XBM、WBMP 等。

<?php
$arr = getimagesize('1.jpg');
/*
返回數組結構:
$arr[0] => 寬度 (像素)
$arr[1] => 高度 (像素)
$arr[2] => 圖片類型常量 (1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP, 7=TIFF, 8=IFF, 9=JPC, 10=JP2, 11=JPX, 12=JB2, 13=SWC, 14=IFF, 15=WBMP, 16=XBM)
$arr[3] => 字符串 'width="xxx" height="yyy"' 可直接插入 <img> 標籤
$arr['bits'] => 色深
$arr['channels'] => 通道數 (3=RGB, 4=CMYK)
$arr['mime'] => MIME 類型 (image/jpeg, image/png 等)
*/
// 兩種等效輸出方式
echo '<img src="1.jpg" ' . $arr[3] . ' alt="" />';
echo '<img src="1.jpg" width="' . $arr[0] . '" height="' . $arr[1] . '" alt="" />';
?>

獲取文件名與擴展名:pathinfo()

不僅限圖片,適用於任意文件路徑解析。

$a = 'aaaaa.jpg';
print_r(pathinfo($a));
/*
Array
(
    [dirname] => .
    [basename] => aaaaa.jpg
    [extension] => jpg
    [filename] => aaaaa
)
*/
// 直接取擴展名
$ext = pathinfo($a, PATHINFO_EXTENSION); // 'jpg'
// 直接取不含擴展名的文件名
$name = pathinfo($a, PATHINFO_FILENAME); // 'aaaaa'

快速判斷圖片類型:exif_imagetype()

僅返回類型常量(整數),比 getimagesize() 更快、內存佔用更低,適合僅需驗證格式的場景。

$type = exif_imagetype('c:/a.jpg'); // 返回 2 表示 JPEG
// 常量對照:IMAGETYPE_GIF=1, IMAGETYPE_JPEG=2, IMAGETYPE_PNG=3...

自定義封裝函數:統一返回結構、自動格式化大小

整合上述函數,返回關鍵信息陣列,方便業務層直接使用:

<?php
/**
 * 獲取圖片完整信息
 * @param string $imagePath 圖片絕對路徑或相對路徑
 * @return array|false 成功返回信息陣列,失敗返回 false
 */
function getImageInfo( $imagePath ) {
    if ( ! file_exists($imagePath) ) return false;

    $imgInfo = getimagesize($imagePath);
    if ( $imgInfo === false ) return false;

    // 類型常量轉人類可讀字符串
    $typeMap = [
        1 => 'GIF', 2 => 'JPEG', 3 => 'PNG', 4 => 'SWF',
        5 => 'PSD', 6 => 'BMP', 7 => 'TIFF', 8 => 'IFF',
        9 => 'JPC', 10 => 'JP2', 11 => 'JPX', 12 => 'JB2',
        13 => 'SWC', 14 => 'IFF', 15 => 'WBMP', 16 => 'XBM'
    ];
    $typeStr = $typeMap[$imgInfo[2]] ?? 'Unknown';

    // 文件大小格式化 (KB, 保留整數)
    $sizeKB = ceil(filesize($imagePath) / 1024) . ' KB';

    return [
        'width'       => $imgInfo[0],
        'height'      => $imgInfo[1],
        'type'        => $typeStr . ' 圖像',
        'mime'        => $imgInfo['mime'],
        'size'        => $sizeKB,
        'bits'        => $imgInfo['bits'],
        'channels'    => $imgInfo['channels'],
        'html_attr'   => $imgInfo[3], // 可直接用於 <img>
    ];
}

// 使用示例
$info = getImageInfo('./images/photo.jpg');
if ( $info ) {
    echo "寬度: {$info['width']}px
"; echo "高度: {$info['height']}px
"; echo "類型: {$info['type']}
"; echo "大小: {$info['size']}
"; echo "MIME: {$info['mime']}
"; // 直接輸出 img 標籤 echo '<img src="./images/photo.jpg" ' . $info['html_attr'] . ' alt="" />'; } ?>

常見陷阱與最佳實踐

場景推薦函數注意事項
僅需驗證是否為圖片/格式exif_imagetype()速度最快,不讀取像素數據
需獲取尺寸、用於縮圖計算getimagesize()會讀取文件頭,稍慢但信息全
需解析路徑獲取擴展名pathinfo()注意大小寫,建議 strtolower()
上傳驗證組合使用先 exif_imagetype() 快速過濾,再 getimagesize() 確認尺寸限制

掌握這組函數組合,即可應對絕大多數圖片屬性獲取與驗證需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved