ホームページ  >  記事  >  バックエンド開発  >  PHP の画像処理ライブラリ GD の紹介

PHP の画像処理ライブラリ GD の紹介

PHPz
PHPzオリジナル
2023-06-23 08:10:511644ブラウズ

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 library installs の場合、GD ライブラリ拡張機能が正常にインストールされたことを意味します。

次に、GD ライブラリの実際的な例をいくつか示します。

検証コードの生成

検証コードの生成は Web サイト開発における一般的なタスクであり、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ピクセルのキャンバスを作成し、背景を白で塗りつぶし、キャンバス上に認証コードを描画し、画像形式で出力します。

サムネイルの生成

Web サイトでは、ページの読み込みを高速化するために、通常、大きな画像が小さなサムネイルに圧縮されます。 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 関数を使用して元の画像をターゲット キャンバスにコピーし、サイズ変更します。最後に、対象のキャンバスを指定したパスに保存します。

ウォーターマークの追加

Web サイトにウォーターマークを追加すると、画像の著作権をある程度保護できます。 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 関数を使用して、ループ内にウォーターマークを追加します。最後に、元の画像を指定したパスに保存します。

上記は、PHP での GD ライブラリの実際的なアプリケーションのいくつかの例です。 GD ライブラリを使用すると、画像を簡単に加工、生成、出力することができ、Web サイトをよりカラフルにすることができます。

以上がPHP の画像処理ライブラリ GD の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。