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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
php过滤危险html代码
Aug 18 PHP
PHP 配置文件中open_basedir选项作用
Jul 19 PHP
PHP Stream_*系列函数
Aug 01 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
php中动态调用函数的方法
Mar 16 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP使用第三方即时获取物流动态实例详解
Apr 27 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 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
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python之变量类型和if判断方式
2020/05/05 Python
python文件及目录操作代码汇总
2020/07/08 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
详解Python中的文件操作
2021/01/14 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
节水倡议书范文
2014/04/15 职场文书
企业总经理任命书
2014/06/05 职场文书
综治维稳工作汇报
2014/10/27 职场文书
英语演讲开场白
2015/05/29 职场文书
校运会通讯稿
2015/07/18 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers