影像處理在網路應用中十分重要,常用於影像分析、資料處理和使用者互動。本文將使用 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;
}