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也可以?成Shell Script
Oct 09 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
php实现可逆加密的方法
Aug 11 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PDO::exec讲解
Jan 28 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
SONY SRF-M100的电路分析
2021/03/02 无线电
提取HTML标签
2006/10/09 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
载入进度条 效果
2006/07/08 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
node+multer实现图片上传的示例代码
2020/02/18 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python列表与元组的异同详解
2019/07/02 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
《乡愁》教学反思
2014/02/18 职场文书
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android