1.文字水印
/**
* 文字水印函数
* @param string $filename 图片地址
* @param string $text 文字文案
* @param int $position 水印位置(1左上角,2左下角,3中间)
* @param int $red 红色颜色比重
* @param int $green 绿色颜色比重
* @param int $blue 蓝色颜色比重
* @param int $alpha 透明度
* @param string $savePath 新图片保存位置
* @param bool $isDelSrc 是否删除原文件
*/
function waterMarkText($fileName = '', $text = '', $position = 1, $red = 255, $green = 0, $blue = 0, $alpha = 60, $savePath = '', $isDelSrc = false)
{
//源图片信息
if (!is_file($fileName)) {
exit('未找到文件');
}
@$fileInfo = getimagesize($fileName);
if (!$fileInfo) {
exit( '不是真实图片');
}
if(!in_array($position,[1,2,3])){
exit('水印位置选择有误');
}
list($srcw,$srch) = $fileInfo;//图片尺寸
$mime = $fileInfo['mime'];//图片类型 类似image/png
$createFun = str_replace('/','createfrom',$mime);//用变量创建替换函数,增加扩展性
$outFun = str_replace('/',null,$mime);//用变量创建替换函数,增加扩展性
$image = $createFun($fileName);
$color = imagecolorallocatealpha($image,$red,$green,$blue,$alpha);
switch ($position) {
case $position == 1://左上角
$x = 0;
$y = 0;
break;
case $position == 2://左下角
$x = 0;
$y = $srch - 20;
break;
case $position == 3://中间位置(大概的粗略位置)
$x = $srcw/2 - 20;
$y = $srch/2 - 20;
break;
}
imagestring($image,5,$x,$y,$text,$color);//写水印操作
header("Content-type: $mime");//用动态变量替换
$outFun($image);//函数用动态变量替换 imagepng(),输出到浏览器
if($savePath && !empty($savePath)){
if(!file_exists($savePath)){
mkdir($savePath,0777,true);
}
$outFun($image,$savePath.'/'.'watermarktext_'.substr(md5(uniqid(microtime(true),true)),0,5).basename($fileName));//函数用动态变量替换 imagepng(),保存进文件
}
if($isDelSrc){//是否删除原文件
@unlink($fileName);
}
imagedestroy($image);
}
waterMarkText('../image/0.jpeg','dog.com',0,255,0,0,50,'wm',false);
2.图片水印
<?php /** * 图片水印的封装 * User: sxt * @param string $dstName 原图片地址 * @param string $srcName 水印图片地址 * @param int $position 水印位置(1:左上角 2:左下角 3:正中间位置 4:右上角 5:右下角) * @param int $pct 透明度(0-100) * @param string $savePath 保存路径 * @param bool $isDelSrc 是否删除原文件 */ function waterMarkImage($dstName = '', $srcName= '', $position = 1, $pct = 60, $savePath = '', $isDelSrc = false) { //源图片信息 if (!is_file($dstName)) { exit('未找到源图片文件'); } @$dstInfo = getimagesize($dstName); if (!$dstInfo) { exit( '源图片文件不是真实图片'); } //水印图片信息 if (!is_file($srcName)) { exit('未找到水印图片文件'); } @$srcInfo = getimagesize($srcName); if (!$srcInfo) { exit( '水印图片文件不是真实图片'); } if(!in_array($position,[1,2,3,4,5])){ exit('水印位置选择有误'); } list($dstw,$dsth) = $dstInfo;//原图片尺寸 list($srcw,$srch) = $srcInfo;//水印图片尺寸 if ($srcw > $dstw || $srch > $dsth) { exit('水印图片尺寸大于原图片'); } $dstMime = $dstInfo['mime'];//原图片类型 类似image/png $srcMime = $srcInfo['mime'];//logo图片类型 类似image/png $createFun = str_replace('/','createfrom',$dstMime ); $createSrcFun = str_replace('/','createfrom',$srcMime ); $outFun = str_replace('/',null,$dstMime); $dstImage = $createFun($dstName); $srcImage = $createSrcFun($srcName); switch ($position) { case $position == 1://左上角 $x = 0; $y = 0; break; case $position == 2://左下角 $x = 0; $y = $dsth - $srch; break; case $position == 3://正中间位置 $x = ($dstw - $srcw) / 2; $y = ($dsth - $srch) / 2; break; case $position == 4://右上角 $x = $dstw - $srcw; $y = 0; break; case $position == 5://右下角 $x = $dstw - $srcw; $y = $dsth - $srch; break; default: $x = 0; $y = 0; } imagecopymerge($dstImage,$srcImage,$x,$y,0,0,$srcw,$srch,$pct);//写水印操作 header("Content-type: $dstMime");//用动态变量替换 $outFun($dstImage);//函数用动态变量替换 imagepng(),输出到浏览器 if($savePath && !empty($savePath)){ if(!file_exists($savePath)){ mkdir($savePath,0777,true); } $outFun($dstImage,$savePath.'/'.'watermarkimg_'.substr(md5(uniqid(microtime(true),true)),0,5).basename($dstName));//函数用动态变量替换 imagepng(),保存进文件 } if($isDelSrc){//是否删除原文件 @unlink($dstName); @unlink($srcName); } imagedestroy($dstImage); imagedestroy($srcImage); } //测试 waterMarkImage('../image/0.jpeg','../image/shear.png',5,70,'imgmark');