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(38)
- 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)
最新日志
随机日志
- linux 批量查找删除
- 独立IP与共享IP对SEO的影响分析(转载)
- php-fpm通过request_slowlog_timeout检查哪个脚本执行时间长
- 永远不要在 Linux 执行的 10 个最危险的命令
- js 实现php中sprintf函数
- Js中window.parent ,window.top,window.self 详解
- Warning: Unknown: Unable to allocate memory for pool. in Unknown on line 0 Warning: require_once(): Unable to allocate memory for pool
- Jquery跨域请求php获取数据之jsonp