影像處理的實現與應用(PHP 版)

啊飒飒大苏打發表於2024-10-25

影像處理在網路應用中十分重要,常用於影像分析、資料處理和使用者互動。本文將使用 PHP 實現一些基本的影像處理操作,包括灰度轉換、去除邊框、提取有效區域和影像分割。

環境準備
確保你的 PHP 環境已安裝 GD 庫,這是進行影像處理的核心擴充套件。以下示例假設你有一個基本的 PHP 伺服器環境。

灰度轉換
灰度轉換是影像處理中常用的操作。我們可以透過 GD 庫來實現這一功能:

php

function convertToGray($imagePath) {
$image = imagecreatefromjpeg($imagePath);
imagefilter($image, IMG_FILTER_GRAYSCALE);
return $image;
}
去除影像邊框
去除邊框可以透過設定邊框區域的顏色為白色或透明來實現:

php

function clearBorders($image, $borderWidth) {
$width = imagesx($image);
$height = imagesy($image);

// 設定邊框為白色
$white = imagecolorallocate($image, 255, 255, 255);

for ($x = 0; $x < $width; $x++) {
    for ($y = 0; $y < $height; $y++) {
        if ($x < $borderWidth || $y < $borderWidth || 
            $x >= $width - $borderWidth || $y >= $height - $borderWidth) {
            imagesetpixel($image, $x, $y, $white);
        }
    }
}

return $image;

}
提取有效區域
提取有效區域的過程是遍歷影像找到主要內容區域,以下是相應程式碼:

php

function getValidRegion($image, $grayThreshold) {
$width = imagesx($image);
$height = imagesy($image);
$minX = $width; $minY = $height;
$maxX = 0; $maxY = 0;

for ($y = 0; $y < $height; $y++) {
    for ($x = 0; $x < $width; $x++) {
        $rgb = imagecolorat($image, $x, $y);
        $colors = imagecolorsforindex($image, $rgb);
        $gray = ($colors['red'] + $colors['green'] + $colors['blue']) / 3;

        if ($gray < $grayThreshold) {
            if ($x < $minX) $minX = $x;
            if ($y < $minY) $minY = $y;
            if ($x > $maxX) $maxX = $x;
            if ($y > $maxY) $maxY = $y;
        }
    }
}

// 複製有效區域
$validRegion = imagecreatetruecolor($maxX - $minX + 1, $maxY - $minY + 1);
imagecopy($validRegion, $image, 0, 0, $minX, $minY, $maxX - $minX + 1, $maxY - $minY + 1);
return $validRegion;

}
影像分割
影像分割可以將影像分成多個小塊,以下是實現這一功能的程式碼:

php

function splitImage($image, $rows, $cols) {
$width = imagesx($image);
$height = imagesy($image);
$pieces = [];

$pieceWidth = $width / $cols;
$pieceHeight = $height / $rows;

for ($row = 0; $row < $rows; $row++) {
    for ($col = 0; $col < $cols; $col++) {
        $piece = imagecreatetruecolor($pieceWidth, $pieceHeight);
        imagecopy($piece, $image, 0, 0, $col * $pieceWidth, $row * $pieceHeight, $pieceWidth, $pieceHeight);
        $pieces[] = $piece;
    }
}

return $pieces;

}
生成二進位制編碼
最後,可以生成影像的二進位制編碼,將影像的灰度值轉換為二進位制表示:

php

function generateBinaryCode($image, $grayThreshold) {
$width = imagesx($image);
$height = imagesy($image);
$binaryCode = '';

for ($y = 0; $y < $height; $y++) {
    for ($x = 0; $x < $width; $x++) {
        $rgb = imagecolorat($image, $x, $y);
        $colors = imagecolorsforindex($image, $rgb);
        $gray = ($colors['red'] + $colors['green'] + $colors['blue']) / 3;

        $binaryCode .= $gray < $grayThreshold ? '1' : '0';
    }
}

return $binaryCode;

}

相關文章