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 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
php中header设置常见文件类型的content-type
Jun 23 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
composer.lock文件的作用
Feb 03 PHP
twig模板常用语句实例小结
Feb 04 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
微信公众号之主动给用户发送消息功能
Jun 22 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
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
深入分析js中的constructor和prototype
2012/04/07 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python遍历类中所有成员的方法
2015/03/18 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python算法之图的遍历
2017/11/16 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
java判断三位数的实例讲解
2019/06/10 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
实习生自荐信范文分享
2013/11/27 职场文书
学校采购员岗位职责
2014/01/02 职场文书
元旦晚会主持词
2014/03/24 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
公司证明怎么写
2014/09/22 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
详解redis在微服务领域的贡献
2021/10/16 Redis
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python