<?php
setWater('https://bdimg1.qunliao.info/tos-cn-i-j5hyufq5o6/fastdfs3/M00/D2/43/ChONol2Rfv-AbLlbAAGhnL0QGkY8623085~tplv-j5hyufq5o6-scale:400:0.jpeg', 'dqd-water.png', '', '', 9, '', 'img');
//setWater('food.jpg', 'dqd-water.png', '', '', 9, '', 'img');
/**
* 图片添加水印,支持根据图片尺寸自适应水印图片
* @param $imgSrc, 目标图片,可带相对目录地址
* @param $markImg, 水印图片,可带相对目录地址,支持PNG和GIF两种格式
* @param $markText, 给图片添加的水印文字
* @param $TextColor, 水印文字的字体颜色
* @param $markPos, 图片水印添加的位置,取值范围:0~9
0:随机位置,在1~8之间随机选取一个位置
1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
* @param string $fontType, 具体的字体库,可带相对目录地址
* @param string $markType, 图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印
* @param string $filename, 保存文件名
* @param string $midWidth, 等比例缩放水印图片的基值(宽度)
*/
function setWater($imgSrc, $markImg, $markText, $TextColor, $markPos, $fontType = '', $markType = 'img', $filename = '', $midWidth = 1000)
{
$filename = 'test2.jpg';
//获取图片尺寸
$srcInfo = @getimagesize($imgSrc);
$srcImg_w = $srcInfo[0];
$srcImg_h = $srcInfo[1];
//创建画布,载入图像
switch ($srcInfo[2]) {
case 1:
$srcim = imagecreatefromgif($imgSrc);
break;
case 2:
$srcim = imagecreatefromjpeg($imgSrc);
break;
case 3:
$srcim = imagecreatefrompng($imgSrc);
break;
default:
die("不支持的图片文件类型");
exit;
}
//创建水印图品,同原图
if ($markType == "img") {
if (!file_exists($markImg) || empty($markImg)) {
return false;
}
//根据图片尺寸,等比例缩放水印
$markImg = image_resize(file_get_contents('dqd-water.png'), '', '', round($srcImg_w / 1000, 1));
$markImgInfo = @getimagesize($markImg);
$markImg_w = $markImgInfo[0];
$markImg_h = $markImgInfo[1];
if ($srcImg_w < $markImg_w || $srcImg_h < $markImg_h) {
die("水印图片尺寸大于原图");
exit;
}
/**
* 缩放
*/
// $block = imagecreatetruecolor($markImg_w * 0.5, $markImg_h * 0.5);
// // 启用混色模式
// imagealphablending($block, false);
//
// // 保存PNG alpha通道信息
// imagesavealpha($block, true);
// // 创建原图画板
// $markim = imagecreatefromstring(file_get_contents($markImg));
//
// // 缩放
// imagecopyresampled($block, $markim, 0, 0, 0, 0, $markImg_w * 0.5, $markImg_h * 0.5, $markImg_w, $markImg_h);
switch ($markImgInfo[2]) {
case 1:
$markim = imagecreatefromgif($markImg);
break;
case 2:
$markim = imagecreatefromjpeg($markImg);
break;
case 3:
$markim = imagecreatefrompng($markImg);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
$logow = $markImg_w;
$logoh = $markImg_h;
}
if ($markType == "text") {
$fontSize = 16;
if (!empty($markText)) {
if (!file_exists($fontType)) {
return;
}
} else {
return;
}
$box = @imagettfbbox($fontSize, 0, $fontType, $markText);
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
}
//水印位置
if ($markPos == 0) {
$markPos = rand(1, 9);
}
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:
die("此位置不支持");
exit;
}
//创建新的画布
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
//将图片绘制到画布上
imagecopy($dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
//加图片
if ($markType == "img") {
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
imagedestroy($markim);
}
//加文字
if ($markType == "text") {
$rgb = explode(',', $TextColor);
$color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType, $markText);
}
//保存文件
switch ($srcInfo[2]) {
case 1:
imagegif($dst_img, $filename);
break;
case 2:
$res = imagejpeg($dst_img, $filename);
break;
case 3:
imagepng($dst_img, $filename);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
//销毁临时文件
imagedestroy($dst_img);
imagedestroy($srcim);
unlink($markImg);
}
/**
* 缩放图片
* @param $imagedata, 图像数据
* @param $width, 缩放宽度
* @param $height, 缩放高度
* @param int $per, 缩放比例,为0不缩放,>0忽略参数2、3的宽高
* @return bool|string
*/
function image_resize($imagedata, $width, $height, $per = 0)
{
// 1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
// 获取图像信息
list($bigWidth, $bigHight, $bigType) = getimagesizefromstring($imagedata);
// 缩放比例
if ($per > 0) {
$width = $bigWidth * $per;
$height = $bigHight * $per;
}
// 创建缩略图画板
$block = imagecreatetruecolor($width, $height);
// 启用混色模式
imagealphablending($block, false);
// 保存PNG alpha通道信息
imagesavealpha($block, true);
// 创建原图画板
$bigImg = imagecreatefromstring($imagedata);
// 缩放
imagecopyresampled($block, $bigImg, 0, 0, 0, 0, $width, $height, $bigWidth, $bigHight);
// 生成临时文件名
$tmpFilename = uniqid() . '.png';
// 保存
switch ($bigType) {
case 1: imagegif($block, $tmpFilename);
break;
case 2: imagejpeg($block, $tmpFilename);
break;
case 3: imagepng($block, $tmpFilename);
break;
}
// 销毁
imagedestroy($block);
return $tmpFilename;
}
//image_resize(file_get_contents('icon.png'), '', '', 0.5);