本文提供一個完整的 PHP 圖片上傳並自動添加水印的實現方案,支持 JPEG/GIF 格式,水印位置隨機分布於四角,代碼可直接用於項目中。
<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 "圖片格式不符合要求!";
}
}
?>
move_uploaded_file() 替代 copy() 更安全