本文實例講述了PHP圖片加水印實現方法。分享給大家供大家參考,代碼不是很完善,歡迎大家多多指教!代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>圖片批量加水印</title>
<script language="javascript" type="text/javascript">
function AddInput(){
var input=document.createElement('input');//創建一個input節點
var br=document.createElement('br');//創建一個br節點
input.setAttribute('type','file');// 設置input節點type屬性爲file
input.setAttribute('name','files[]');//設置input節點 name屬性爲files[],以 數組的方式傳遞給服務器端
document.form1.appendChild(br);//把節點添加到 form1表單中
document.form1.appendChild(input);
}
</script>
</head>
<?php
/**
* 爲圖片加水印
* @param string $desImg 目標圖片 參數格式爲 ./images/pic.jpg
* @param string $waterImg 水印圖片 參數格式同上,水印圖片爲 png格式,背景透明
* @param int positon 水印地位 1:頂部居左 2:頂部居右 3:居中 4 :底部居左 5:底部居右
* @param bool $saveas 能否另存爲,默許值false,默示籠蓋原圖
* @param int $alpha 水印圖片的不通明度
* @return string $savepath 新圖片的途徑
* **/
function watermark($desImg,$waterImg,$positon = 1,$saveas = false,$alpha = 80){
//獲取目圖片的根基信息
$temp = pathinfo($desImg);
$name = $temp["basename"];//文件名
$path = $temp["dirname"];//文件地點的文件夾
$extension = $temp["extension"];//文件擴展名
if($saveas){
//需要另存爲
$name = rtrim($name,".$extension")."_2.";//從頭命名
$savepath = $path."/".$name.$extension;
}else{
//不需要另存爲則籠蓋原圖
$savepath=$path."/".$name;
}
$info = getImageInfo($desImg);//獲取目標圖片的信息
$info2 = getImageInfo($waterImg);//獲取水印圖片的信息
$desImg = create($desImg);//從原圖創立
$waterImg = create($waterImg);//從水印圖片創立
//地位1:頂部居左
if($positon == 1){
$x = 0;
$y = 0;
}
//地位2:頂部居右
if($positon == 2){
$x = $info[0] - $info2[0];
$y = 0;
}
//地位3:居中
if($positon == 3){
$x = ($info[0] - $info2[0]) / 2;
$y = ($info[1] - $info2[1]) / 2;
}
//地位4:底部居左
if($positon == 4){
$x = 0;
$y = $info[1] - $info2[1];
}
//地位5:底部居右
if($positon == 5){
$x = $info[0]-$info2[0];
$y = $info[1]-$info2[1];
}
imagecopymerge($desImg,$waterImg,$x,$y,0,0,$info2[0],$info2[1],$alpha);
imagejpeg($desImg,$savepath);
imagedestroy($desImg);
imagedestroy($waterImg);
return $savepath;
}
/**
* 獲取圖片的信息,width,height,image/type
* @param string $src 圖片途徑
* @return 數組
* **/
function getImageInfo($src){
return getimagesize($src);
}
/**
* 創立圖片,前往本錢範例
* @param string $src 圖片途徑
* @return resource $im 前往本錢範例
* **/
function create($src){
$info = getImageInfo($src);
switch($info[2]){
case 1:
$im=imagecreatefromgif($src);
break;
case 2:
$im=imagecreatefromjpeg($src);
break;
case 3:
$im=imagecreatefrompng($src);
break;
}
return $im;
}
if(isset($_POST['sub']) && $_POST['sub']=="www"){
$waterimg = "water.png"; // 水印圖片
$ftype = array('image/jpg','image/jpeg','imgage/png','image/pjpeg','image/gif');//允許上傳的文件類型
$files = $_FILES['files'];
$fnum = count($files['name']); //取得上傳文件個數
if($fnum > 0){
echo '<div style="width: 600px;margin: 0 auto;">';
for($i = 0;$i < $fnum;$i++){
$n = $i + 1;
if($files['name'][$i] != '' && is_uploaded_file($files['tmp_name'][$i])){
//判斷文件是否是允許的類型
if(in_array($files['type'][$i],$ftype)){
$fname[$i] = 'upfile/'.rand(0,10000).time().substr($files['name'] [$i],strrpos($files['name'][$i],'.'));//自動命名
move_uploaded_file($files['tmp_name'][$i],$fname[$i]);
echo '<br/>'.$n.'. 文件上傳成功!('.$fname[$i].')';
// 生成水印圖片
watermark($fname[$i],$waterimg);
}else{
echo '<br/>'.$n.'. 不允許的文件類型!';
exit;
}
}else{
echo '<br/>'.$n.'. 該文件不存在!';
}
}
echo '</div>';
}
}
?>
<body>
<div style="width: 600px;margin: 0 auto;">
<h2>圖片批量加水印</h2>
<hr>
<a href="javascript:;" onclick="AddInput()">再上傳一張</a>
<!-- <button οnclick="AddInput()" type="button" style="color: #FFF;background-color: red;border: 0;padding: 5px;">再上傳一張</button> --><br/><br/>
<form name="form1" method="post" action="" enctype="multipart/form-data" >
<input type="file" name="files[]" id="files[]" />
<input type="submit" name="sub" value="上傳"/>
<input name="sub" type="hidden" id="sub" value="www" />
</form>
</div>
</body>
</html>