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 相关文章推荐
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
PHP教程 基本语法
Oct 23 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
php头像上传预览实例代码
May 02 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
php解决安全问题的方法实例
Sep 19 PHP
Laravel实现ORM带条件搜索分页
Oct 24 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP微商城开源代码实例
2019/03/27 PHP
javascript call和apply方法
2008/11/24 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
node中的密码安全(加密)
2018/09/17 Javascript
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
竞聘上岗演讲稿范文
2014/01/10 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年度工作总结报告
2014/12/15 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js