php 图片添加满屏图片水印的实现方法
时间:2023-05-29 12:10:58浏览:7932
在项目的开发中,通常需要我们给图片加上水印来防止盗图,以下是php程序给图片添加水印的方法,记录一下,方便下次使用
原图
水印图
程序实现
缩放png图片,防止传入的水印图片大小不合适,可以用此方法调整水印大小
/**
* 放大缩小png图片
* @param $origin
* @param $target
* @param $per
*/
function zoomPng($origin, $target, $per)
{
$srcImg = imagecreatefrompng($origin);
$srcWidth = imagesx($srcImg);
$srcHeight = imagesy($srcImg);
//创建新图
$newWidth = round($srcWidth * $per);
$newHeight = round($srcHeight * $per);
$newImg = imagecreatetruecolor($newWidth, $newHeight);
//分配颜色 + alpha,将颜色填充到新图上
$alpha = imagecolorallocatealpha($newImg, 0, 0, 0, 127);
imagefill($newImg, 0, 0, $alpha);
//将源图拷贝到新图上,并设置在保存 PNG 图像时保存完整的 alpha 通道信息
imagecopyresampled($newImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
imagesavealpha($newImg, true);
imagepng($newImg, $target);
//释放资源,防止内存溢出
imagedestroy($newImg);
imagedestroy($srcImg);
}
添加水印方法,此方法是给图片添加满屏的水印,如果只需要一个水印,那么只需要将方法体中的for循环方法去掉,将里面的imagecopyresampled方法执行一遍即可
/**
* 添加满屏水印
* @param string $originPath
* @param string $markPath
* @param string $targetPath
*/
function addFillMark(string $originPath, string $markPath, string $targetPath): void
{
$info = getimagesize($originPath);
switch ($info['mime']) {
case 'image/png':
$originSource = imagecreatefrompng($originPath);
break;
case 'image/jpeg':
$originSource = imagecreatefromjpeg($originPath);
break;
case 'image/gif':
$originSource = imagecreatefromgif($originPath);
break;
}
$originWidth = $info[0];
$originHeight = $info[1];
//获取水印图片资源
$markSource = imagecreatefrompng($markPath);
//获取水印图片的宽高
$markWidth = imagesx($markSource);
$markHeight = imagesy($markSource);
//循环平铺水印
for ($x = 0; $x < $originWidth; $x++) {
for ($y = 0; $y < $originHeight; $y++) {
imagecopyresampled($originSource, $markSource, $x, $y, 0, 0, $markWidth, $markHeight, $markWidth, $markHeight);
$y += $markHeight;
}
$x += $markWidth;
}
//保存图片到目标路径下
imagesavealpha($originSource, true);
switch ($info['mime']) {
case 'image/png':
imagepng($originSource, $targetPath);
break;
case 'image/jpeg':
imagejpeg($originSource, $targetPath);
break;
case 'image/gif':
imagegif($originSource, $targetPath);
break;
}
//释放图片资源
imagedestroy($markSource);
imagedestroy($originSource);
}
来源:https://blog.csdn.net/weixin_44540711/article/details/121854695
上一篇:layui 复选框全选
下一篇:MySQL binlog最大编号是多少?
- Linux文章
- PHP文章
- 随机文章
- Linux中的find(-atime...
- mysql的expire_logs_...
- PHP 扩展 libsodium s...
- Linux下利用find和cp实现筛...
- 使用mysqldump命令导出备份m...
- Linux系统如何设置开机自动运行脚...
- Linux上实现秒级执行的定时任务
- shell echo -e 颜色输出
- Linux下通过grep查找指定的进...
- 解决执行脚本报syntax erro...
发表评论
昵称: 验证码: