php 为图片添加水印
今天花了一点时间研究了php中imagecopymerge函数,这个函数是为图片添加水印的一个函数,我为此写了一个方法为需要的图片添加水 印,希望对你有所帮助,也希望你提出宝贵的意见!
<?php
/*
* Created on 2011-5-12
* author 孤独求学人
*/
function waterMark($srcimg,$waterimg,$savename,$savepath,$position=1,$alpha=20){
//判断原图片是否存在
if(!file_exists($srcimg)){
return "原始图片不存在";
}
//判断水印图片是否存在
if(!file_exists($waterimg)){
return "水印图片不存在";
}
//图像合并程度是0和100之间的数值,既水印的透明度
if($alpha > 100 || $alpha < 0){
return "$alpha 必须大于0小于100";
}
//获取原始图片的信息
$temp = pathinfo($srcimg);
$srcimg_basename = $temp['basename'];
$srcimg_path = $temp['dirname'];
$savename = isset($savename) ? $savename : $srcimg_basename;//存储图片的名字
$savepath = isset($savepath) ? $savepath : $srcimg_path;//图片存储路径
$savefile = $savepath."/".$savename;//保存文件
$srcinfo = @getimagesize($srcimg);//获取原始图片的信息
$waterinfo = @getimagesize($waterimg);//获取水印图片的信息
//判断水印位置
switch($position){
case "1"://顶部居左
$x=$y=0;
break;
case "2"://顶部居右
$x = $srcinfo[0] - $waterinfo[0];$y=0;
break;
case "3"://顶部居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y=0;
break;
case "4"://图片居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y = ($srcinfo[1]-$waterinfo[1])/2;
break;
case "5"://底部居左
$x = 0;$y = $srcinfo[1]-$waterinfo[1];
break;
case "6"://底部居中
$x = ($srcinfo[0] - $waterinfo[0])/2;$y = $srcinfo[1]-$waterinfo[1];
break;
case "7"://底部居右
$x = $srcinfo[0] - $waterinfo[0];$y = $srcinfo[1]-$waterinfo[1];
break;
default:
$x=$y=0;
}
$srcImageObj = image_create_image_ext($srcimg);
if(!$srcImageObj){
return "原始新建图像失败";
}
$waterImageObj = image_create_image_ext($waterimg);
if(!$waterImageObj){
return "水印图片新建失败";
}
/*
* 拷贝并合并图像的一部分int imagecopymerge
* 其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时本函数和 imagecopy() 完全一样。
* 参数 说明
* dst_im 目标图像
* src_im 被拷贝的源图像
* dst_x 目标图像开始 x 坐标
* dst_y 目标图像开始 y 坐标,x,y同为 0 则从左上角开始
* src_x 拷贝图像开始 x 坐标
* src_y 拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝
* src_w (从 src_x 开始)拷贝的宽度
* src_h (从 src_y 开始)拷贝的高度
* pct 图像合并程度,取值 0-100 ,当 pct=0 时,实际上什么也没做,反之完全合并。
* 当为 pct = 100 时对于调色板图像本函数和 imagecopy() 完全一样
*/
imagecopymerge($srcImageObj,$waterImageObj,$x,$y,0,0,$waterinfo[0],$waterinfo[1],$alpha);
//判断原始图片的类型
switch($srcinfo[2]){
case '1'://以 GIF 格式将图像输出到文件
imagegif($srcImageObj,$savefile);
break;
case '2'://以 JPG 格式将图像输出到文件
imagejpeg($srcImageObj,$savefile);
break;
case '3'://以 PNG 格式将图像输出到文件
imagepng($srcImageObj,$savefile);
break;
default:
return false;
}
//销毁图像
imagedestroy($srcImageObj);
imagedestroy($waterImageObj);
return $savefile;
}
/*
* resource imagecreatefromgif ( string filename)
* imagecreatefromgif() 返回一图像标识符,代表了从给定的文件名取得的图像。
*/
function image_create_image_ext($filename){
$info = @getimagesize($filename);
$im ="";
switch($info[2]){
case "1":
return $im = imagecreatefromgif($filename);
break;
case "2":
return $im = imagecreatefromjpeg($filename);
break;
case "3":
return $im = imagecreatefrompng($filename);
break;
}
}
?>
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(19)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(73)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
最新日志
- 成为架构师,如何真正具备“系统思维”?
- DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议
- 从技术专家到战略领袖:成就技术总监的路径与思维
- python 如何读取超大的文件
- python requests 模块
- 如何给自己充电?
- 告别2024,迎接2025:深耕梦想,向前而行
- linux 的 dns 缓存,NSCD 服务
- The following untracked working tree files would be overwritten by checkout
- insecure connection not allowed,产生原因及如何解决