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

PHP 圖片上傳加水印完整實現代碼

     編輯:PHP 綜合知識

本文提供一個完整的 PHP 圖片上傳並自動添加水印的實現方案,支持 JPEG/GIF 格式,水印位置隨機分布於四角,代碼可直接用於項目中。

核心邏輯流程

  1. 表單提交圖片(enctype=multipart/form-data)
  2. 服務端驗證文件類型(image/jpg, image/gif 等)
  3. 根據類型創建圖像資源(imagecreatefromjpeg/gif)
  4. 載入水印圖(PNG 格式支持透明度)
  5. 開啟混合模式,計算隨機位置
  6. 合成水印(imagecopy)並輸出覆蓋原文件
  7. 移動臨時文件到目標目錄

完整代碼實現

<form action="<?=$_SERVER['PHP_SELF']?>" method="post" enctype="multipart/form-data">
  <input name="upfile" type="file" />
  <input type="submit" name="Submit" value="提交" />
  <input type="hidden" name="action" value="doup">
</form>

<?php
if($_POST['action']=='doup') {
    $uptypes = array('image/jpg','image/jpeg','image/pjpeg','image/gif');
    $wFile = $_FILES['upfile'];
    $waterimg = "water.gif"; // 水印圖路徑

    if(in_array($wFile['type'], $uptypes)) {
        // 1. 載入原圖
        if(strstr($wFile['type'],"jp")) {
            $im = imageCreatefromjpeg($wFile['tmp_name']);
        } else {
            $im = imageCreatefromgif($wFile['tmp_name']);
        }
        $wfilew = imagesx($im); $wfileh = imagesy($im);

        // 2. 載入水印
        imagealphablending($im, true); // 開啟混合模式
        $im2 = imagecreatefrompng($waterimg); // 水印建議用 PNG
        $waterw = imagesx($im2); $waterh = imagesy($im2);

        // 3. 隨機位置:左上或右下
        $randval = rand(0,9);
        if(in_array($randval, [0,2,3,7,8])) {
            $wimgx = 5; $wimgy = 5; // 左上
        } else {
            $wimgx = $wfilew - 5 - $waterw;
            $wimgy = $wfileh - 5 - $waterh; // 右下
        }

        // 4. 合成並輸出
        imagecopy($im, $im2, $wimgx, $wimgy, 0, 0, $waterw, $waterh);
        if(strstr($wFile['type'],"jp")) imagejpeg($im, $wFile['tmp_name']);
        else imagegif($im, $wFile['tmp_name']);

        imagedestroy($im); imagedestroy($im2);
        copy($wFile['tmp_name'], $wFile['name']); // 保存
    } else {
        echo "圖片格式不符合要求!";
    }
}
?>

優化建議

  • 水印圖使用 PNG 以支持 Alpha 透明通道
  • 增加文件大小、尺寸限制,防止資源耗盡
  • 使用 move_uploaded_file() 替代 copy() 更安全
  • 水印位置可擴展為居中、平鋪等多種模式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved