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

PHP 根據圖片色階智慧定位浮水印

     編輯:PHP 相關知識

核心概念

傳統浮水印功能通常固定位置(如右下角),但這樣可能遮蔽圖片重要內容。本文介紹一種基於 ImageMagick 擴充套件,根據圖片色階特徵智慧判斷最佳浮水印位置的實作方案。

核心函數實作

<?php
function add_wm($nmw_water, $src_file, $output_file, $x, $y) {
    // 若輸出檔案已存在則直接返回
    if (file_exists($output_file)) return;

    // 取得浮水印圖片尺寸
    $w1 = MagickGetImageWidth($nmw_water);
    $h1 = MagickGetImageHeight($nmw_water);

    // 建立新的 MagickWand 物件讀取來源圖片
    $nmw = NewMagickWand();
    MagickReadImage($nmw, $src_file);

    // 預設浮水印位置微調參數
    $lt_w = 50;
    $lt_h = 50;

    // 根據傳入座標決定定位策略
    if ($x == 0) {
        // 自動模式:取得圖片尺寸作為基準點
        $w = MagickGetImageWidth($nmw);
        $h = MagickGetImageHeight($nmw);
        $x = $w;
        $y = $h;
    } else {
        // 手動模式:調整微調參數
        $lt_w = 30;
        $lt_h = 40;
    }

    // 合成浮水印(右下角偏移)
    MagickCompositeImage($nmw, $nmw_water, MW_OverCompositeOp, 
        $x - $w1 - $lt_w, $y - $h1 - $lt_h);
    
    MagickWriteImage($nmw, $output_file);
    DestroyMagickWand($nmw);
}

批次處理遞迴函數

提供遞迴處理目錄下所有圖片的功能,自動建立對應輸出目錄結構:

function add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr) {
    $dp = dir($to_dir);
    while ($file = $dp->read()) {
        if ($file != '.' && $file != '..') {
            if (is_dir($to_dir . '/' . $file)) {
                mkdir($output_dir . '/' . $file);
                add_wm_recurse($nmw_water, $to_dir . '/' . $file, 
                    $output_dir . '/' . $file, $arr);
            } else {
                // 處理圖片檔案...
            }
        }
    }
    $dp->close();
}

進階應用建議

  • 色階分析:可結合直方圖分析,避開圖片高頻色彩區域
  • 邊緣檢測:使用 Sobel 運算子偵測邊緣,避免浮水印蓋在物件輪廓上
  • 語意分割:搭配深度學習模型識別主要物件區域
  • 透明度自適應:根據背景亮度動態調整浮水印不透明度

環境需求

需安裝 PHP ImageMagick 擴充套件(php-imagick),並確認伺服器已安裝 ImageMagick 程式庫。現代專案也可考慮使用 GD 函數庫或介入式工具如 Intervention Image 套件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved