PHP图片添加水印功能示例小结


Posted in PHP onOctober 03, 2016

本文实例总结了PHP图片添加水印功能。分享给大家供大家参考,具体如下:

例1、很简单图下添加水印函数

<?php
/**
 * 追加水印
 *
 * @param string $source_img 原始图片url
 * @param string $water_map 水印图片url
 */
function addWaterMap($source_img, $water_map)
{
  $img = imagecreatefromjpeg($source_img); //读取原图
  $img_x = imagesx($img); //原图宽
  $img_y = imagesy($img); //原图高
  imagealphablending($img, true);//设置为混合填色模式
  //$img_water_map = imagecreatefromjpeg($water_map); //读取水印图片
  $img_water_map = imagecreatefrompng($water_map);
  $water_x = imagesx($img_water_map); //水印宽
  $water_y = imagesy($img_water_map); //水印高
  $wimg_x = $img_x - $water_x - 10; //水印x坐标
  $wimg_y = $img_y - $water_y - 10; //水印y坐标
  imagecopy($img, $img_water_map, $wimg_x, $wimg_y, 0, 0, $water_x, $water_y); //分别为原图,水印,水印x坐标,水印y坐标,水印图片横轴开始点,水印图片纵轴开始点,水印横轴结束,水印纵轴结束
  imagejpeg($img, $source_img, 95); //输出到目标文件
  imagedestroy($img); //销毁内存数据流
  imagedestroy($img_water_map); //销毁内存数据流
  return true;
}
?>

实例2、一个比较完整图片增加水印类

<?php
/**
 * 图片加水印(适用于png/jpg/gif格式)
 *
 * @author flynetcn
 *
 * @param $srcImg  原图片
 * @param $waterImg 水印图片
 * @param $savepath 保存路径
 * @param $savename 保存名字
 * @param $positon  水印位置
 *          1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
 * @param $alpha   透明度 -- 0:完全透明, 100:完全不透明
 *
 * @return 成功 -- 加水印后的新图片地址
 *   失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
 *       -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
 */
function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30)
{
 $temp = pathinfo($srcImg);
 $name = $temp['basename'];
 $path = $temp['dirname'];
 $exte = $temp['extension'];
 $savename = $savename ? $savename : $name;
 $savepath = $savepath ? $savepath : $path;
 $savefile = $savepath .'/'. $savename;
 $srcinfo = @getimagesize($srcImg);
 if (!$srcinfo) {
 return -1; //原文件不存在
 }
 $waterinfo = @getimagesize($waterImg);
 if (!$waterinfo) {
 return -2; //水印图片不存在
 }
 $srcImgObj = image_create_from_ext($srcImg);
 if (!$srcImgObj) {
 return -3; //原文件图像对象建立失败
 }
 $waterImgObj = image_create_from_ext($waterImg);
 if (!$waterImgObj) {
 return -4; //水印文件图像对象建立失败
 }
 switch ($positon) {
 //1顶部居左
 case 1: $x=$y=0; break;
 //2顶部居右
 case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
 //3居中
 case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
 //4底部居左
 case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
 //5底部居右
 case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
 default: $x=$y=0;
 }
 imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
 switch ($srcinfo[2]) {
 case 1: imagegif($srcImgObj, $savefile); break;
 case 2: imagejpeg($srcImgObj, $savefile); break;
 case 3: imagepng($srcImgObj, $savefile); break;
 default: return -5; //保存失败
 }
 imagedestroy($srcImgObj);
 imagedestroy($waterImgObj);
 return $savefile;
}
function image_create_from_ext($imgfile)
{
 $info = getimagesize($imgfile);
 $im = null;
 switch ($info[2]) {
 case 1: $im=imagecreatefromgif($imgfile); break;
 case 2: $im=imagecreatefromjpeg($imgfile); break;
 case 3: $im=imagecreatefrompng($imgfile); break;
 }
 return $im;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
深入了解php4(1)--回到未来
Oct 09 PHP
NO3第三帝国留言簿制作过程
Oct 09 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
php测试kafka项目示例
Feb 06 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 #PHP
PHP实现生成带背景的图形验证码功能
Oct 03 #PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 #PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 #PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 #PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 #PHP
php简单统计中文个数的方法
Sep 30 #PHP
You might like
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
JavaScript国旗变换效果代码
2008/08/13 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python创建学生成绩管理系统
2019/11/22 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
计算机系毕业生推荐信
2013/11/06 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
优秀学生事迹材料
2014/02/08 职场文书
安全教育感言
2014/03/04 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
代办委托书怎么写
2014/08/01 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫