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高级OOP技术演示
Aug 27 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
php去除字符串换行符示例分享
Feb 13 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php查询whois信息的方法
Jun 08 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
javascript语言结构小记(一)
2011/09/10 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Python读取csv文件实例解析
2019/12/30 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
优秀学生干部推荐材料
2014/02/03 职场文书
运动会稿件300字
2014/02/14 职场文书
单位活动策划方案
2014/08/17 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
会计主管岗位职责
2015/04/02 职场文书
教学督导岗位职责
2015/04/10 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
运动员入场前导词
2015/07/20 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL
java中如何截取字符串最后一位
2022/07/07 Java/Android