image 類是織夢 CMS 核心圖片處理組件,基於 GD 庫實現縮略圖生成與圖片/文字水印,支持 JPEG/GIF/PNG 格式,自動檢測動態 GIF 避免損壞動畫。
function __construct(
$targetfile, // 目標圖片路徑
$cfg_thumb, // 縮略圖模式:1=強制覆蓋原圖 2=生成單獨文件
$cfg_watermarktext, // 文字水印配置數組
$photo_waterpos, // 水印位置 1-9(九宮格)
$photo_diaphaneity, // 水印透明度 0-100
$photo_wheight, // 最小加水印高度
$photo_wwidth, // 最小加水印寬度
$cfg_watermarktype, // 水印類型:1=PNG圖片 2=GIF圖片 3=文字
$photo_marktrans, // 圖片水印融合度
$trueMarkimg, // 水印圖片路徑
$attach = array() // 附加信息(如 size)
)
thumb_gd() 基於 imagecreatetruecolor + imagecopyresampled 高質量縮放$cfg_thumb=1 時直接覆蓋原文件(生成 .thumb.jpg 備份);=2 時生成獨立文件$watermarkstatus),縮略後自動調用 watermark()$watermarkminwidth/height)watermark_gd() 實際繪製// 九宮格位置計算
switch ($this->watermarkstatus) {
case 1: $x=5; $y=5; break; // 左上
case 2: $x=($w-$lw)/2; $y=5; break; // 上中
case 3: $x=$w-$lw-5; $y=5; break; // 右上
case 4: $x=5; $y=($h-$lh)/2; break; // 左中
case 5: $x=($w-$lw)/2; $y=($h-$lh)/2; break; // 正中心
case 6: $x=$w-$lw-5; $y=($h-$lh)/2; break; // 右中
case 7: $x=5; $y=$h-$lh-5; break; // 左下
case 8: $x=($w-$lw)/2; $y=$h-$lh-5; break; // 下中
case 9: $x=$w-$lw-5; $y=$h-$lh-5; break; // 右下
}
// 圖片水印(類型 1/2)
if ($type < 2) {
$logo = $type==1 ? imagecreatefrompng($mark_file) : imagecreatefromgif($mark_file);
imagecopy($dst, $logo, $x, $y, 0, 0, $lw, $lh);
}
// 文字水印(類型 2)
elseif ($type == 2) {
// 支持陰影、字體、顏色、角度
imagettftext($dst, $size, $angle, $x+$ax, $y+$ay, $color, $font, $text);
}
// 混合模式水印(類型 0,舊版兼容)
else {
imagealphablending($logo, true);
imagecopymerge($dst, $logo, $x, $y, 0, 0, $lw, $lh, $transparency);
}
| 特性 | 支持情況 | 備註 |
|---|---|---|
| 格式支持 | JPEG / GIF / PNG | 輸出格式跟隨輸入,JPEG 可指定質量 |
| 動態 GIF | 檢測並跳過處理 | 避免破壞動畫,直接返回原圖 |
| 文字水印 | 支持 TTF 字體、陰影、旋轉 | 需服務器安裝 FreeType 並配置字體路徑 |
| 透明度控制 | 0-100 可調 | 圖片水印用 imagecopymerge,文字用 alpha 通道 |
| 內存安全 | 及時 imagedestroy | 類中未顯式銷毀資源,長時間批量處理需手動釋放 |
// 配置參數(通常從系統配置讀取)
$cfg = [
'thumb' => 2, // 生成獨立縮略圖
'watermarktext' => [
'text' => 'Copyright © Demo',
'fontpath' => '/fonts/msyh.ttf',
'size' => 14,
'color' => '255,255,255',
'shadowx' => 1, 'shadowy' => 1,
'shadowcolor' => '0,0,0',
'angle' => 0
],
'photo_waterpos' => 9, // 右下角
'photo_diaphaneity' => 50, // 50% 透明度
'photo_wheight' => 200, // 最小 200px
'photo_wwidth' => 200,
'cfg_watermarktype' => 2, // 文字水印
'photo_marktrans' => 50,
'trueMarkimg' => ''
];
$img = new image('/uploads/photo.jpg', ...$cfg);
$img->thumb(800, 600); // 生成 800x600 內的縮略圖並加水印
// 或單獨加水印
// $img->watermark();
composer require intervention/image,鏈式調用、支持 Imagine/GD/Imagick 多驅動、Laravel 集成完美。imagecreatetruecolor 等函數更輕量可控。維護老織夢項目時,image 類仍能穩定工作,注意 PHP 8.1+ 中 GD 函數簽名變化(如 imagecreatefromjpeg 返回 GdImage 對象而非 resource)。