在日常開發中,圖像處理是一項非常常見的需求,比如圖像翻轉(鏡像)、壓縮圖片大小、保存優化後的圖像等。在PHP 中,我們可以使用內置的GD 庫輕鬆實現這些功能。
本文將一步一步帶你通過PHP 完整掌握圖像翻轉、壓縮與保存的處理流程。無論你是正在開發圖片上傳接口,還是在構建圖像管理系統,這篇文章都能為你提供實用的參考。
首先確保你的服務器已啟用GD 庫。在PHP 中查看是否支持GD 庫:
<?php
if (extension_loaded('gd')) {
echo "GD 庫已啟用";
} else {
echo "請安裝並啟用 GD 庫";
}
?>
我們以JPEG 圖片為例加載圖像文件:
<?php
$imagePath = 'uploads/sample.jpg';
$image = imagecreatefromjpeg($imagePath);
if (!$image) {
die('加載圖像失敗');
}
?>
<?php
function flipImageHorizontally($image) {
$width = imagesx($image);
$height = imagesy($image);
$flipped = imagecreatetruecolor($width, $height);
for ($x = 0; $x < $width; $x++) {
imagecopy($flipped, $image, $width - $x - 1, 0, $x, 0, 1, $height);
}
return $flipped;
}
$image = flipImageHorizontally($image);
?>
<?php
function flipImageVertically($image) {
$width = imagesx($image);
$height = imagesy($image);
$flipped = imagecreatetruecolor($width, $height);
for ($y = 0; $y < $height; $y++) {
imagecopy($flipped, $image, 0, $height - $y - 1, 0, $y, $width, 1);
}
return $flipped;
}
// $image = flipImageVertically($image); // 如需垂直翻轉取消註釋
?>
圖像壓縮通常是指在保存時調整圖像的質量。對於JPEG 圖像,可以在保存時設置壓縮質量(0-100):
<?php
$compressedPath = 'uploads/compressed.jpg';
$quality = 75; // 數值越小,壓縮越高,圖像質量越低
if (!imagejpeg($image, $compressedPath, $quality)) {
die('壓縮並保存圖像失敗');
}
?>
成功壓縮和保存之後,可以給出圖像訪問鏈接,例如:
<?php
echo '圖像處理成功,訪問鏈接:<a href="https://m66.net/uploads/compressed.jpg">點擊查看圖片</a>';
?>
你也可以將整個流程封裝為函數,提升復用性:
<?php
function processImage($inputPath, $outputPath, $flipType = 'horizontal', $quality = 80) {
$image = imagecreatefromjpeg($inputPath);
if (!$image) return false;
if ($flipType === 'horizontal') {
$image = flipImageHorizontally($image);
} elseif ($flipType === 'vertical') {
$image = flipImageVertically($image);
}
return imagejpeg($image, $outputPath, $quality);
}
?>
通過PHP 的GD 庫,我們可以非常靈活地對圖像進行處理,包括:
加載圖像文件;
翻轉(水平/垂直);
壓縮與保存;
輸出處理結果。
這套流程適用於大部分Web 應用場景,特別是在用戶上傳圖片後需要優化處理的功能。
如果你有更多關於圖像處理的需求,比如裁剪、加水印、調整尺寸等,GD 庫同樣可以勝任,後續我們也會帶來更進階的圖像處理文章,敬請關注!