在處理圖像縮略圖時,我們往往不僅僅需要縮小圖像尺寸,還可能需要對圖像進行翻轉(如水平或垂直翻轉)以滿足某些視覺效果的需求。 PHP 提供了imagecopyresampled()和imageflip()這兩個非常實用的函數,分別用於圖像縮放和圖像翻轉。如果你想製作一個經過翻轉且質量較高的縮略圖,這兩個函數可以完美配合使用。
此函數用於將一部分圖像拷貝並縮放到另一幅圖像中,支持高質量的圖像縮放處理。相比imagecopyresized() ,它的效果更加細膩,適用於生成縮略圖。
imageflip()函數用於對圖像進行翻轉處理,支持水平、垂直以及同時進行水平+垂直翻轉。這個函數自PHP 5.5 起被引入。
下面是一個完整的示例代碼,該代碼將一張原始圖像先進行縮放處理生成縮略圖,然後對縮略圖進行水平翻轉:
<?php
// 原始圖像路徑
$sourcePath = 'https://m66.net/uploads/sample.jpg';
// 獲取圖像信息
list($width, $height, $type) = getimagesize($sourcePath);
// 創建圖像資源
switch ($type) {
case IMAGETYPE_JPEG:
$sourceImage = imagecreatefromjpeg($sourcePath);
break;
case IMAGETYPE_PNG:
$sourceImage = imagecreatefrompng($sourcePath);
break;
case IMAGETYPE_GIF:
$sourceImage = imagecreatefromgif($sourcePath);
break;
default:
die('不支持的圖像類型');
}
// 縮略圖尺寸
$newWidth = 150;
$newHeight = intval($height * $newWidth / $width);
// 創建目標圖像資源
$thumbImage = imagecreatetruecolor($newWidth, $newHeight);
// 高質量縮放
imagecopyresampled($thumbImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// 翻轉縮略圖(水平翻轉)
imageflip($thumbImage, IMG_FLIP_HORIZONTAL);
// 輸出到瀏覽器或保存
header('Content-Type: image/jpeg');
imagejpeg($thumbImage);
// 銷毀資源
imagedestroy($sourceImage);
imagedestroy($thumbImage);
?>
使用imageflip()前,確保你的PHP 版本不低於5.5。
為了保持圖像比例,建議按照原圖寬高比計算縮略圖尺寸。
如果是處理PNG 圖像,記得處理透明背景(如使用imagealphablending()和imagesavealpha() )。
這種處理方式在電商平台、圖庫、內容管理系統等場景中非常常見,尤其當你需要生成圖像預覽並添加視覺效果(如鏡像)時, imageflip()和imagecopyresampled()的組合能極大提高開發效率和圖像質量。
通過本文的講解,你可以輕鬆掌握