/** * @desc xmsb_watermark PHP图片加水印 jpg,png,gif * @param string $imgPath 原图片路径 * @param string $outPath 带水印图片输出路径 * @param string $watermark 图片水印路径,若文件不存在则视为字符串水印 * @param int $position 水印位置:1左上 2右上 3左下 4右下 * @param int $padding 水印与图片边缘距离 * @param int $waterWidth 仅限图片水印(字符串水印无效):图片水印宽度 * @param array $textColor 仅限字符串水印(图片水印无效):[r, g, b, a(0-100)] * @return string 错误信息,无错误时原样返回$outPath */ function xmsb_watermark($imgPath, $outPath, $watermark, $position = 4, $padding = 10, $waterWidth = 100, $textColor = [0, 0, 0, 1]) { // 获取原始图像 $img = imagecreatefromstring(file_get_contents($imgPath)); $imgInfo = getimagesize($imgPath); $x = 0; $y = 0; switch($position) { case 1: $x = $padding; $y = $padding; break; case 2: $x = $imgInfo[0] - $padding; $y = $padding; break; case 3: $x = $padding; $y = $imgInfo[1] - $padding; break; case 4: $x = $imgInfo[0] - $padding; $y = $imgInfo[1] - $padding; break; default: $x = $imgInfo[0] - $padding; $y = $imgInfo[1] - $padding; break; } // 判断是图片水印还是文字水印 if(file_exists($watermark) && in_array(substr($watermark, strrpos($watermark, '.') + 1), ['jpg', 'png', 'gif'])) { // 创建图片的实例 $water = imagecreatefromstring(file_get_contents($watermark)); // 获取水印图片的宽高 list($water_w, $water_h) = getimagesize($watermark); // 重设水印宽高 if($water_w >= $waterWidth) { $new_water_w = $waterWidth; $new_water_h = $water_h / ($water_w / $waterWidth); } // 重新校对x,y轴位置 if($x != $padding) $x -= $new_water_w; if($y != $padding) $y -= $new_water_h; //创建一个新的图像源(目标图像) $new_water = imagecreatetruecolor($new_water_w, $new_water_h); //执行等比缩放 imagecopyresized($new_water, $img, 0, 0, 0, 0, $new_water_w, $new_water_h, $water_w, $water_h); // 将水印图片复制到目标图片上 imagecopy($img, $new_water, $x, $y, 0, 0, $new_water_w, $new_water_h); } else { // 请自行准备字体文件 $font = './msyh.ttf'; // 重新校对x,y轴位置 $check = imagettfbBox(20, 0, $font, $watermark); if($x != $padding) $x -= $check[2]; if($y != $padding) { $y -= ($check[5] + 30); } else { $y -= $check[5]; } // 字体颜色 r g b a $color = imagecolorallocatealpha($img, $textColor[0], $textColor[1], $textColor[2], $textColor[3]); // 画布资源 字体大小 旋转角度 x轴 y轴 字体颜色 字体文件 需要渲染的字符串 imagettftext($img, 20, 0, $x, $y, $color, $font, $watermark); } $outExt = substr($outPath, strrpos($outPath, '.') + 1); switch($outExt) { case 'jpg': imagejpeg($img, $outPath); break; case 'png': imagepng($img, $outPath); break; case 'gif': imagegif($img, $outPath); break; default: return '输出文件名有误'; break; } imagedestroy($img); return $outPath; }
测试结果:
xmsb_watermark('img-png.png', '1.png', 'img1-png.png', 4, 0, 100, [0, 0, 0, 1]);
xmsb_watermark('img-png.png', '1.png', 'img-png.png', 1, 10, 100, [0, 0, 0, 1])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。