首页 > PHP教程 > php开发知识文章

PHP gd库对图片进行等比缩放和添加Logo水印

php的gd库常用的图片操作,进行图片上传时,经常需要对图片进行等比缩放或添加水印

phpinfo()函数查看是否安装了gd库

生成图片验证码

验证码:http://www.yuqingqi.com/phpjiaocheng/538.html

添加Logo水印

/**
* 给一张图片添加上一个logo图片水印(以保存的方式实现)
* @param string $pic 被处理图片源
* @param string $logo 水印图片
* @param string $pre 处理后图片名的前缀名
* @return String 返回后的图片名称(带路径)
*/

function imageUpdateLogo($pic, $logo, $pre = "n_")
{
//获取图片源的基本信息
$picinfo = getimageSize($pic);
//获取logo图片的基本信息
$logoinfo = getimageSize($logo);
//根据图片类型创建出对应的图片源
switch ($picinfo[2]) {
case 1: //gif
$im = imagecreatefromgif($pic);
break;
case 2: //jpg
$im = imagecreatefromjpeg($pic);
break;
case 3: //png
$im = imagecreatefrompng($pic);
break;
default:
die("图片类型错误!");
}
//根据logo图片类型创建出对应的图片源
switch ($logoinfo[2]) {
case 1: //gif
$logoim = imagecreatefromgif($logo);
break;
case 2: //jpg
$logoim = imagecreatefromjpeg($logo);
break;
case 3: //png
$logoim = imagecreatefrompng($logo);
break;
default:
die("logo图片类型错误!");
}
//执行图片水印处理
imagecopyresampled($im, $logoim, $picinfo[0] - $logoinfo[0],
$picinfo[1] - $logoinfo[1], 0, 0, $logoinfo[0],
$logoinfo[1], $logoinfo[0], $logoinfo[1]);
//输出图像(根据源图像的类型,输出为对应的类型)
$pic1 = pathinfo($pic);
//解析源图像的名字和路径信息
$newpic = $pic1["dirname"] . "/" . $pre . $pic1["basename"];
switch ($picinfo[2]) {
case 1:
imagegif($im, $newpic);
break;
case 2:
imagejpeg($im, $newpic);
break;
case 3:
imagepng($im, $newpic);
break;
}
//释放图片资源
imagedestroy($im);
imagedestroy($logoim);
//返回结果
return $newpic;
}

//测试
echo imageUpdateLogo("./images/aa.jpg","./images/a1.png");

图片的等比缩放

/**
* 实现突破的等比缩放函数(以保存的方式实现)
* @param string $pic 被缩放的图片源
* @param int $rex 缩放后图片的最大宽度
* @param int $rey 缩放后图片的最大高度
* @param string $pre 缩放后图片名的前缀名
* @return string 返回后的图片名称(带路径)
*/

function imageUpdateSize($pic, $rex = 100, $rey = 100, $pre = "s_")
{
$info = getimageSize($pic); //获取图片的基本信息
$w = $info[0]; //获取宽度
$h = $info[1]; //获取高度
//获取图片的类型并为此创建对应图片资源
switch ($info[2]) {
case 1: //gif
$im = imagecreatefromgif($pic);
break;
case 2: //jpg
$im = imagecreatefromjpeg($pic);
break;
case 3: //png
$im = imagecreatefrompng($pic);
break;
default:
die("图片类型错误!");
}
//计算缩放比例
if (($rex / $w) > ($rey / $h)) {
$b = $rey / $h;
} else {
$b = $rex / $w;
}
//计算出缩放后的尺寸
$nw = floor($w * $b);
$nh = floor($h * $b);
//创建一个新的图像(目标图像)
$nim = imagecreatetruecolor($nw, $nh);
//执行等比缩放
imagecopyresampled($nim, $im, 0, 0, 0, 0, $nw, $nh, $w, $h);
//输出图像(根据源图像的类型,输出为对应的类型)
$picinfo = pathinfo($pic);
//解析源图像的名字和路径信息
$newpic = $picinfo["dirname"] . "/" . $pre . $picinfo["basename"];
switch ($info[2]) {
case 1:
imagegif($nim, $newpic);
break;
case 2:
imagejpeg($nim, $newpic);
break;
case 3:
imagepng($nim, $newpic);
break;
}
//释放图片资源
imagedestroy($im);
imagedestroy($nim);
//返回结果
return $newpic;
}

//测试
echo imageUpdateSize("./images/aa.jpg",200,200,"a1_");

以上就是对图片进行等比缩放或添加水印的方法的全部内容,希望大家有所学习。

 
imagecopyresampled()函数说明

imagecopyresampled()函数说明

 

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。