/*
* 添加水印
* $imgSrc:目标圖檔,可帶相對目錄位址,
* $markImg:水印圖檔,可帶相對目錄位址,支援PNG和GIF兩種格式,如水印圖檔在執行檔案mark目錄下,可寫成:mark/mark.gif
* $markPos:圖檔水印添加的位置,取值範圍:0~9
* 0:循環平鋪水印
* 1:頂部居左 2:頂部居中 3:頂部居右 4:左邊居中
* 5:圖檔中心 6:右邊居中 7:底部居左 8:底部居中 9:底部居右
* */
protected static function addWatermark($imgSrc, $markImg, $markPos = 0)
{
//如果圖檔不存在或者logo不存在則不處理
if (!file_exists($imgSrc) || !file_exists($markImg)) {
return [
'status' => false,
'message' => '目标圖檔或水印圖檔不存在!'
];
}
//擷取圖、水印 寬高類型
list($srcImg_w, $srcImg_h, $srcImg_t) = getimagesize($imgSrc);
list($markImg_w, $markImg_h, $markImg_t) = getimagesize($markImg);
if ($srcImg_w < $markImg_w || $srcImg_h < $markImg_h) {
return [
'status' => false,
'message' => '水印圖檔尺寸不能大于目标圖檔尺寸!'
];
}
switch ($srcImg_t) {
case 1:
$srcim = imagecreatefromgif($imgSrc);
break;
case 2:
$srcim = imagecreatefromjpeg($imgSrc);
break;
case 3:
$srcim = imagecreatefrompng($imgSrc);
break;
default:
return [
'status' => false,
'message' => '不支援的圖檔檔案類型!'
];
}
switch ($markImg_t) {
case 1:
$markim = imagecreatefromgif($markImg);
break;
case 2:
$markim = imagecreatefromjpeg($markImg);
break;
case 3:
$markim = imagecreatefrompng($markImg);
break;
default:
return [
'status' => false,
'message' => '不支援的圖檔檔案類型!'
];
}
$logow = $markImg_w;
$logoh = $markImg_h;
$dst_img = imagecreatetruecolor($srcImg_w, $srcImg_h);
imagecopy($dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
imagedestroy($srcim);
if ($markPos) {
//圖檔水印添加的位置
switch ($markPos) {
case 1:
$x = +5;
$y = +5;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 5;
$y = +15;
break;
case 4:
$x = +5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 5:
$x = ($srcImg_w - $logow) / 2;
$y = ($srcImg_h - $logoh) / 2;
break;
case 6:
$x = $srcImg_w - $logow - 5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 7:
$x = +5;
$y = $srcImg_h - $logoh - 5;
break;
case 8:
$x = ($srcImg_w - $logow) / 2;
$y = $srcImg_h - $logoh - 5;
break;
case 9:
$x = $srcImg_w - $logow - 5;
$y = $srcImg_h - $logoh - 5;
break;
default:
return [
'status' => false,
'message' => '此位置不支援!'
];
}
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
} else {
//循環平鋪水印
for ($x = 0; $x < $srcImg_w; $x++) {
for ($y = 0; $y < $srcImg_h; $y++) {
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
$y += $logoh;
}
$x += $logow;
}
}
imagedestroy($markim);
switch ($srcImg_t) {
case 1:
$status = imagegif($dst_img, $imgSrc);
break;
case 2:
$status = imagejpeg($dst_img, $imgSrc);
break;
case 3:
$status = imagepng($dst_img, $imgSrc);
break;
default:
$status = false;
}
imagedestroy($dst_img);
if ($status) {
$res = [
'status' => true,
'message' => '添加水印圖檔成功!'
];
} else {
$res = [
'status' => false,
'message' => '添加水印圖檔失敗!'
];
}
return $res;
}