首頁  >  文章  >  後端開發  >  介紹PHP中的影像處理庫GD

介紹PHP中的影像處理庫GD

PHPz
PHPz原創
2023-06-23 08:10:511646瀏覽

GD 是 PHP 中一個非常實用的影像處理函式庫,利用 GD 函式庫,PHP 開發者可以輕鬆實現影像的處理、產生和輸出,例如產生驗證碼、縮圖、浮水印等。本文將會為大家介紹 GD 函式庫,並舉出一些 PHP 中使用 GD 函式庫的範例。

GD 函式庫是一個開源函式庫,最初是為 C 語言設計的,可用於處理 JPEG、PNG、GIF 等多種圖片格式。在 PHP 5.0 之後,GD 函式庫就可以與 PHP 一起使用了。

使用GD 庫,你可以:

  • 讀取並儲存圖片
  • #調整圖片大小
  • 調整圖片品質
  • #新增文字和形狀
  • 新增浮水印
  • 轉換圖片格式等

#在PHP 中,要使用GD 庫,需要先檢查是否安裝了GD 擴充功能。可以透過執行以下程式碼進行檢查:

if (extension_loaded('gd') && function_exists('gd_info')) {
    echo 'GD 库已安装';
} else {
    echo 'GD 库未安装';
}

如果輸出的是 GD 函式庫已安裝,表示 GD 函式庫擴充功能已經正常安裝。

下面給出一些 GD 函式庫的實用範例。

產生驗證碼

產生驗證碼是網站開發中常見的任務,而 GD 函式庫很方便的實作了這個功能。具體實作方法如下:

// 生成验证码
function generateVerificationCode($length = 4) {
    // 验证码字符集,去掉了容易混淆的字符
    $chars = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';
    // 洗牌
    $chars = str_shuffle($chars);
    // 取出前 $length 个字符作为验证码
    $code = substr($chars, 0, $length);
    // 存储验证码
    $_SESSION['verificationCode'] = $code;
    // 创建画布
    $image = imagecreatetruecolor(120, 30);
    // 分配颜色
    $bgColor = imagecolorallocate($image, 255, 255, 255);
    $textColor = imagecolorallocate($image, 0, 0, 0);
    // 填充背景
    imagefill($image, 0, 0, $bgColor);
    // 画上验证码
    imagestring($image, 5, 20, 8, $code, $textColor);
    // 输出图像
    header('Content-type: image/jpeg');
    imagejpeg($image);
    // 销毁图像
    imagedestroy($image);
}

在上述程式碼中,我們首先產生了一個隨機的驗證碼,然後將其儲存到 SESSION 中。接著創建了一個 120x30 像素的畫布,用白色填滿背景,將驗證碼畫到畫布上,並以圖片格式輸出。

產生縮圖

在網站中,為了加快頁面的載入速度,通常會將大的圖片壓縮成小的縮圖。以下是使用 GD 函式庫產生縮圖的實作方法:

// 生成缩略图
function generateThumbnail($src, $dst, $width, $height) {
    // 获取原图信息
    list($srcWidth, $srcHeight, $type) = getimagesize($src);
    // 根据原图类型创建画布
    switch ($type) {
        case IMAGETYPE_JPEG:
            $imageSrc = imagecreatefromjpeg($src);
            break;
        case IMAGETYPE_PNG:
            $imageSrc = imagecreatefrompng($src);
            break;
        case IMAGETYPE_GIF:
            $imageSrc = imagecreatefromgif($src);
            break;
        default:
            throw new Exception('不支持的图像类型');
    }
    // 计算缩略图的宽高比
    $ratio = min($width / $srcWidth, $height / $srcHeight);
    // 计算缩略图的实际宽度和高度
    $thumbWidth = intval($srcWidth * $ratio);
    $thumbHeight = intval($srcHeight * $ratio);
    // 创建目标画布
    $imageDst = imagecreatetruecolor($thumbWidth, $thumbHeight);
    // 复制原图到目标画布,并调整大小
    imagecopyresampled($imageDst, $imageSrc, 0, 0, 0, 0, $thumbWidth, 
        $thumbHeight, $srcWidth, $srcHeight);
    // 保存图片到指定路径
    imagejpeg($imageDst, $dst);
    // 销毁图像
    imagedestroy($imageSrc);
    imagedestroy($imageDst);
}

在上述程式碼中,我們首先取得原圖的信息,根據原圖類型建立了一個畫布。然後根據縮圖的目標寬度和高度計算出縮圖的寬高比和實際寬度和高度,建立目標畫布,並使用 imagecopyresampled 函數將原圖複製到目標畫布上,並調整大小。最後將目標畫布儲存到指定路徑。

新增浮水印

在網站中加入浮水印可以在一定程度上保護圖片的版權。以下是使用 GD 庫為圖片添加浮水印的實作方法:

// 添加水印
function addWatermark($src, $dst, $watermark) {
    // 获取原图信息
    list($srcWidth, $srcHeight, $type) = getimagesize($src);
    // 根据原图类型创建画布
    switch ($type) {
        case IMAGETYPE_JPEG:
            $imageSrc = imagecreatefromjpeg($src);
            break;
        case IMAGETYPE_PNG:
            $imageSrc = imagecreatefrompng($src);
            break;
        case IMAGETYPE_GIF:
            $imageSrc = imagecreatefromgif($src);
            break;
        default:
            throw new Exception('不支持的图像类型');
    }
    // 获取水印图片信息
    list($watermarkWidth, $watermarkHeight) = getimagesize($watermark);
    // 创建水印画布
    $watermarkImage = imagecreatefrompng($watermark);
    // 定义水印数量和间隔
    $count = 10;
    $padding = 5;
    // 添加水印
    $posX = $padding;
    $posY = $padding;
    for ($i = 0; $i < $count; $i++) {
        imagecopy($imageSrc, $watermarkImage, $posX, $posY, 0, 0, 
            $watermarkWidth, $watermarkHeight);
        $posX += $watermarkWidth + $padding;
    }
    // 保存图片到指定路径
    imagejpeg($imageSrc, $dst);
    // 销毁图像
    imagedestroy($imageSrc);
    imagedestroy($watermarkImage);
}

在上述程式碼中,我們首先取得原圖的信息,根據原圖類型建立了一個畫布。然後獲取水印圖片的信息,並創建水印畫布。最後使用 imagecopy 函數循環加入浮水印。最後將原圖儲存到指定路徑。

以上就是幾個 GD 函式庫在 PHP 中實際應用的範例。透過使用 GD 庫,我們可以輕鬆實現圖片的處理、生成和輸出,讓我們的網站更加豐富多彩。

以上是介紹PHP中的影像處理庫GD的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn