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初学者写及时补给skype用户充话费的小程序
Nov 02 PHP
一组PHP可逆加密解密算法实例代码
Jan 21 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
PHP文件操作方法汇总
Jul 01 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 PHP
php 的多进程操作实践案例分析
Feb 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
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python中enumerate的用法实例解析
2014/08/18 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
python 调用HBase的简单实例
2016/12/18 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
《美丽的彩虹》教学反思
2014/02/25 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
《悯农》教学反思
2014/04/28 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
通知格式
2015/04/27 职场文书
安全生产感想
2015/08/07 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
Python 读取千万级数据自动写入 MySQL 数据库
2022/06/28 Python