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 相关文章推荐
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
一段实用的php验证码函数
May 19 PHP
php字符串操作常见问题小结
Oct 11 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 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
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python变量的作用域是什么
2020/05/26 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Python extract及contains方法代码实例
2020/09/11 Python
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
户籍证明书标准模板
2014/09/10 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
初中重阳节活动总结
2015/05/05 职场文书
文艺演出主持词
2015/07/01 职场文书
运动会加油稿50字
2015/07/21 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书