首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

CodeIgniter 智慧型圖片裁切:等比縮放 + 置中裁切

     編輯:PHP 綜合知識

需求:將任意尺寸圖片 (如 1024x768) 裁切為固定正方形 (240x240),保持主體不變形、盡可能保留畫面核心內容。解法分兩步驟:等比縮放至可裁切尺寸 → 置中裁切。

實作邏輯

  1. 判斷原圖長寬比:寬 ≥ 高 為「橫向圖」,以高度為基準縮放至 240px;反之為「直向圖」,以寬度為基準。
  2. 縮放後,較長邊會超出 240px,計算超出部分的一半作為裁切起始座標 (x_axis 或 y_axis),執行置中裁切。

CodeIgniter Image Library 實作程式碼

<?php
$this->load->library('image_lib');

list($width, $height) = getimagesize("upload/123.jpg");

$config['image_library'] = 'gd2';
$config['source_image']  = 'upload/123.jpg';
$config['maintain_ratio'] = TRUE;

// 步驟 1:等比縮放
if ($width >= $height) {
    $config['master_dim'] = 'height'; // 以高度為準
} else {
    $config['master_dim'] = 'width';  // 以寬度為準
}
$config['width']  = 240;
$config['height'] = 240;

$this->image_lib->initialize($config);
$this->image_lib->resize();

// 步驟 2:置中裁切
$config['maintain_ratio'] = FALSE;
if ($width >= $height) {
    // 橫向圖:計算縮放後寬度超出 240 的一半
    $config['x_axis'] = floor(($width * 240 / $height - 240) / 2);
} else {
    // 直向圖:計算縮放後高度超出 240 的一半
    $config['y_axis'] = floor(($height * 240 / $width - 240) / 2);
}

$this->image_lib->initialize($config);
$this->image_lib->crop();
?>

關鍵參數說明

  • master_dim:指定縮放基準維度 (width、height、auto)。
  • maintain_ratio:TRUE 保持比例縮放;FALSE 強制依 width/height 裁切。
  • x_axis/y_axis:裁切起始座標 (像素)。

應用場景

  • 會員大頭照、商品縮圖、文章封面圖等需統一尺寸的情境。
  • 可封裝為 Model 方法或 Library,傳入來源路徑、目標尺寸即可複用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved