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动态图像的创建
Oct 09 PHP
针对初学PHP者的疑难问答(2)
Oct 09 PHP
windows xp下安装pear
Dec 02 PHP
使用 MySQL 开始 PHP 会话
Dec 21 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
php猴子选大王问题解决方法
May 12 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 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加密解密类代码
2011/11/27 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
解决VUE自定义拖拽指令时 onmouseup 与 click事件冲突问题
2020/07/24 Javascript
改进Django中的表单的简单方法
2015/07/17 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
有关Python的22个编程技巧
2018/08/29 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
基于python操作ES实例详解
2019/11/16 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
优秀体育委员自荐书
2014/01/31 职场文书
两只小狮子教学反思
2014/02/05 职场文书
大学军训感言800字
2014/02/27 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
市场营销工作计划书
2014/09/15 职场文书
瘦西湖导游词
2015/02/03 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js