首先,为了实现在图片上加水印,我们需要用到PHP的GD图形库,因此需要确保该扩展已在我们的服务器上启用。可以通过以下代码来检查:
<?php
phpinfo();
?>
执行后查看输出结果,如果找到GD图形库相关信息,则表示扩展已启用。
接着,我们需要对代码进行分析、编写。以下为完整的PHP图片加水印程序代码:
<?php
/**
* 图片加水印函数
* @param $srcImg string 原始图片路径
* @param $waterImg string 水印图片路径
* @param int $pos 水印位置,默认为9即右下角
* @param int $pct 水印透明度,默认为60
* @return bool 成功返回true,失败返回false
*/
function waterMark($srcImg, $waterImg, $pos = 9, $pct = 60)
{
//获取原始图片和水印图片信息
$srcInfo = getimagesize($srcImg);
$waterInfo = getimagesize($waterImg);
if (!$srcInfo || !$waterInfo) {
return false;
}
//根据图片类型创建图像
switch ($srcInfo['mime']) {
case 'image/jpeg':
$srcImage = imagecreatefromjpeg($srcImg);
break;
case 'image/gif':
$srcImage = imagecreatefromgif($srcImg);
break;
case 'image/png':
$srcImage = imagecreatefrompng($srcImg);
break;
default:
return false;
}
$waterImage = imagecreatefrompng($waterImg);
//设定水印位置
switch ($pos) {
case 1:
$x = 0;
$y = 0;
break;
case 2:
$x = ($srcInfo[0] - $waterInfo[0]) / 2;
$y = 0;
break;
case 3:
$x = ($srcInfo[0] - $waterInfo[0]);
$y = 0;
break;
case 4:
$x = 0;
$y = ($srcInfo[1] - $waterInfo[1]) / 2;
break;
case 5:
$x = ($srcInfo[0] - $waterInfo[0]) / 2;
$y = ($srcInfo[1] - $waterInfo[1]) / 2;
break;
case 6:
$x = ($srcInfo[0] - $waterInfo[0]);
$y = ($srcInfo[1] - $waterInfo[1]) / 2;
break;
case 7:
$x = 0;
$y = ($srcInfo[1] - $waterInfo[1]);
break;
case 8:
$x = ($srcInfo[0] - $waterInfo[0]) / 2;
$y = ($srcInfo[1] - $waterInfo[1]);
break;
case 9:
default:
$x = ($srcInfo[0] - $waterInfo[0]);
$y = ($srcInfo[1] - $waterInfo[1]);
break;
}
//合并图片
imagecopymerge($srcImage, $waterImage, $x, $y, 0, 0, $waterInfo[0], $waterInfo[1], $pct);
//保存合并后的图片到文件
switch ($srcInfo['mime']) {
case 'image/jpeg':
imagejpeg($srcImage, $srcImg);
break;
case 'image/gif':
imagegif($srcImage, $srcImg);
break;
case 'image/png':
imagepng($srcImage, $srcImg);
break;
}
//释放资源
imagedestroy($srcImage);
imagedestroy($waterImage);
return true;
}
//示例1:给图片加一个默认水印,位于右下角,透明度为60%
waterMark('image.jpg', 'watermark.png');
//示例2:给图片加一个位于中心的水印,透明度为80%
waterMark('image.png', 'logo.png', 5, 80);
该程序的主要逻辑是将水印图片合并到原始图片上,并输出或保存到文件,主要包含以下步骤:
- 获取原始图片和水印图片的信息。
- 根据图片类型创建图像。
- 设定水印位置。
- 合并图片。
- 保存合并后的图片到文件。
- 释放资源。
在代码中,我们定义了一个名为waterMark的函数,该函数接收四个参数:原始图片路径、水印图片路径、水印位置和水印透明度。其中,位置和透明度均有默认值,未传入时程序会使用默认值。
示例1:给图片加一个默认水印
水印位于右下角,透明度为60%
waterMark('image.jpg', 'watermark.png');
示例2:给图片加一个位于中心的水印
水印透明度为80%
waterMark('image.png', 'logo.png', 5, 80);
以上就是PHP经典的给图片加水印程序的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP经典的给图片加水印程序 - Python技术站